我需要在成功验证后才创建会话。
我能够使用快速中间件创建基于redisStore的会话,但是当第一个请求到达服务器时,它会创建会话。
但是如何在成功验证后才能创建会话。
我用Google搜索了一下,发现req.session.regenerate()
(但我发现这个问题如下所述:
Regenerate session IDs with Nodejs Connect)
但是在重新生成的情况下,它会创建一个新的,假设已经创建了旧的,并且使用相同的参数创建。
因此,只有在成功验证后才能创建新的会话ID。
答案 0 :(得分:3)
您可能会将会话的想法与经过身份验证的会话的想法混为一谈。
所有用户都有会话是正常的 - 即使是匿名的,尚未登录的用户也是如此。这与经过身份验证的会话之间的区别仅在于您在Web服务器上本地指定特定用户已经过身份验证。
例如,一旦您对某人进行身份验证,您可以设置:
req.session.isAuthenticated = true;
然后,在渲染页面时,您的控制器可以执行类似
的操作function(req, res, next) {
if (!req.session.isAuthenticated) return res.redirect('/login');
res.render('appPage');
}
答案 1 :(得分:2)
这可能不是您正在寻找的确切答案,但我会为未来的读者回答标题:
通过试验我的应用程序,我发现express-session仅在您操作会话对象时设置会话cookie 。
例如,请考虑以下代码:
app.post('/login', function (req, res) {
var authenticated = false;
if (req.session.authenticated) {
// session cookie is already set
authenticated = true;
} else if (/*validate the user here*/) {
console.log(' authenticating');
authenticated = true;
// if below line executes, the response will have Set-Cookie header
req.session.authenticated = authenticated;
}
res.json({
status: authenticated
//if --^ false, no session cookie will be set since we didn't manipulate session object
});
});
即使请求在内存中创建会话对象供我们使用,但只有在我们操纵(或篡改?)创建的会话对象时,才会发送Set-Cookie
标头
除非我们将Set-Cookie
标题与响应一起发送,并且会话ID存储在客户端的cookie中,否则我不会将其视为已建立的会话并担心它。
希望它有所帮助。
旁注:这是跨域ajax请求的情况,对于正常的http请求可能有所不同,也许有人可以确认这个