在我的登录模块中,一旦我登录,我将请求传递到标题以存储会话,这里是代码
var series = rand.generate(16);
var token = rand.generate(16);
var loginToken = new LoginTokens({
userId: req.user._id,
series: series,
token: token
});
loginToken.save(function(err, l) {
if (err) {
console.log(err);
} else {
console.log(l);
res.cookie('loginToken', JSON.stringify({
series: series,
token: passwordHash.generate(token)
}));
res.status(200);
res.set('Content-Type', 'application/json');
res.end(JSON.stringify({
'success': req.params.res
}));
}
});
虽然这段代码是预先编写的,但我对此并不了解(我不会随意生成16位数字并保存,如果有人请解释)
我的任务是实现注销,因为我不理解上面代码的基本原理我想实现自己的会话模块,这样即使同一个用户从不同的设备登录,两个会话也将被维护并从一台设备注销不会从所有设备注销某人。 所以现在要点是会话ID不会基于用户ID。还有一个名为express-session的模块,我不知道我是否应该使用,我个人觉得在GitHub上阅读后它会做的是为我创建一个会话ID,我将再次拥有为了保存在我的数据库中,为什么要导入一个模块,而是我将base64编码一个像上面这样的随机数并使用它 所以我想问的是真正的问题
如何在节点js中实现会话?
我对生命周期的理解
_id
字段并尝试创建会话对象。 问题您的会话表应该是什么样的?会话表中应该包含哪些参数?然后如何将它们保存到res.cookies?那么你如何处理所有这些cookie,比如在客户端呢? 有人可以回答上述疑虑吗? 我问了一个非常具体的问题,但在评论之后意识到我需要的是逻辑清晰度,我没有在youtube视频和SO帖子上找到一个,所以如果有人可以在代码中分享他们的观点,有一些解释那就太棒了
答案 0 :(得分:0)
通过发送一个具有相同名称的新cookie(一些无效数据可能是好的)和过去的到期来删除Cookie。
passport.logout()删除了护照用来维护当前用户的会话cookie,下一个请求将不再具有cookie,并且将显示为无效请求。
我不确定为什么会有loginToken以及护照身份验证,除了允许您使会话服务器端无效(通过从数据库中删除相应的令牌)检查您的护照策略配置是否有任何在它反序列化用户步骤期间检查LoginToken(这是护照获取会话cookie并根据请求将其转换为用户的地方)