javascript - NodeJs 和 ExpressJs 无法设置 Cookie

标签 javascript node.js session cookies express

你能帮我创建 cookie 吗,因为我无法让它工作。我想在用户登录后设置和创建 cookie,但我不知道我的代码有什么问题。谢谢大家。

这是我的代码,如果您认为还有其他错误或代码更正可以帮我解决吗?多谢你们。 :)

app.js

//deps

var express = require('express');
var app = express();
var redis = require('redis');
var client = redis.createClient();


var delcookie = function(req, res) { res.clearCookie('login_token'); res.redirect('/');     };
var setcookie = function(req, res) { res.cookie('login_token', +new Date(), { maxAge: 3600000, path: '/' }); res.redirect('/'); };

//configs
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(app.router);

client.on('error', function (err) {
console.log('Error: ' + client.host + ':' + client.port + ' - ' + err);
});

app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});

app.get('/login/', function (req, res) {
res.sendfile(__dirname + '/login.html');
});

app.get('/register/', function (req, res) {
res.sendfile(__dirname + '/register.html');
});

app.get('/restricted/', function (req, res) {
res.sendfile(__dirname + '/restricted.html');
});

app.get('/logout/', delcookie, function (req, res) {
res.sendfile(__dirname + '/logout.html');
});

//post

app.post('/login/', function (req, res) {
//res.sendfile(__dirname + '/restricted.html');
client.hmget( req.body.user.username, 'password', function (err,pass) {
if ( (!err) && pass && pass == req.body.user.password ){
    res.redirect('/restricted/', setcookie);
    }   else if ( pass == false)   {
    res.redirect('/register/');
    }   else    {
    res.redirect('/login/');
    }
    });
});

app.post('/register/', function (req, res) {    
client.hmset(req.body.user.username, 'password',req.body.user.password, 
'fname',req.body.user.fname, 'lname', req.body.user.lname, 
'password', req.body.user.password, 'email', req.body.user.email,
'mobile', req.body.user.mobile, redis.print);
res.write('Successfully Registered');
});

app.listen(80);

最佳答案

要使用 cookie,您应该查看 Express cookieSession 中间件。文档在这里:http://expressjs.com/api.html#cookieSession

更新(我现在无法测试,所以这是我记得的):

您可以添加 cookieSession 中间件并使用类似以下内容指定 cookie 的设置:

app.use(express.cookieSession({
    cookie: {
        path: '/',
        maxAge: 3600000
    }
}));

然后当您的用户登录时,您可以使用 req.session.login_token = 'login_token'; 在 session 中设置登录 token 。

当您的用户注销时,您可以通过执行 req.session = null; 清除 session 。

然后在您的身份验证中间件中,您可以检查 session 中是否设置了登录 token ,以查看用户是否已通过身份验证。

关于javascript - NodeJs 和 ExpressJs 无法设置 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18509496/

相关文章:

javascript - 将 jscolor 从一个 php 页面传递到另一个

javascript - npm 未安装顶级依赖项的依赖项

node.js - 如果在多个项目中使用数据库模型文件夹,如何集中?

javascript - requestAnimationFrame 垃圾回收

javascript - 对于较大的数组 - 返回 NaN 而不是数字

javascript - 如何从 nodejs 中从 Google 文档导出的 docx 中提取元作者和标题?

session - CakePHP 3 丢失身份验证 session

javascript - 我真的必须重新加载我的页面两次吗?

asp.net-mvc - 如何在我的项目中实现一个健壮的每请求 session 模式,同时专注于信息隐藏?

javascript - 如何在 Angular 2+ 和 ES2015 模块中导入和使用 zone.js