如何以强有力的方式创建会话并将它们存储在节点js中的cookie中?

时间:2015-11-28 10:52:06

标签: node.js session cookies

在我的登录模块中,一旦我登录,我将请求传递到标题以存储会话,这里是代码

        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中实现会话?

我对生命周期的理解

  1. 用户注册,看看他/她是否存在于数据库中,如果他/她是否提出错误消息,如果他/她没有,您可以通过电子邮件ID为他创建用户名。
  2. 然后您通过代码登录他。在该过程中,您首先检查他是否在数据库中。如果他是你,请继续_id字段并尝试创建会话对象。 问题您的会话表应该是什么样的?会话表中应该包含哪些参数?然后如何将它们保存到res.cookies?那么你如何处理所有这些cookie,比如在客户端呢?
  3. 实施注销时。我的想法是使用passport.logout将从请求标题中删除用户对象但是,我将首先从会话表中删除条目以某种方式清空cookie,然后执行req.logout?
  4. 有人可以回答上述疑虑吗? 我问了一个非常具体的问题,但在评论之后意识到我需要的是逻辑清晰度,我没有在youtube视频和SO帖子上找到一个,所以如果有人可以在代码中分享他们的观点,有一些解释那就太棒了

1 个答案:

答案 0 :(得分:0)

通过发送一个具有相同名称的新cookie(一些无效数据可能是好的)和过去的到期来删除Cookie。

passport.logout()删除了护照用来维护当前用户的会话cookie,下一个请求将不再具有cookie,并且将显示为无效请求。

我不确定为什么会有loginToken以及护照身份验证,除了允许您使会话服务器端无效(通过从数据库中删除相应的令牌)检查您的护照策略配置是否有任何在它反序列化用户步骤期间检查LoginToken(这是护照获取会话cookie并根据请求将其转换为用户的地方)