将护照与Nodejs一起使用时何时将会话设置为false

时间:2019-05-01 00:56:38

标签: node.js passport.js

我刚刚完成了使用passport.js的注册身份验证,但是当我尝试使用登录身份验证时却不断出错

  

错误:无法将用户序列化为会话

这是我的发帖路线:

Until

我看到了关于stackoverflow的评论,说我们需要这样做:

    router.post("/login",passport.authenticate('local-login'),function(req,res){
        res.redirect("/users")

        if (req.user) {
            console.log("Logged In!")
        } else {
            console.log("Not logged in!")
        }

        })

在登录路径中。

使用上面的代码确实可以解决错误消息。也许这是我对护照认证的理解不充分,但这不是通过登录将用户信息存储在会话中的意义。如果将session设置为false,我们如何存储用户信息?

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

请确保您使用最新版本的护照(今天为0.2.1)。

请尝试传递{session:false}作为req.logIn()函数的第二个参数:

app.get('/login', function (req, res, next) {
  passport.authenticate('local', function (err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }

    req.logIn(user, { session: false }, function (err) {

      // Should not cause any errors

      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

打开以下链接以获得更多信息: PassportJS - Custom Callback and set Session to false

答案 1 :(得分:0)

这取自password.js的docs

  

禁用会话

  成功通过身份验证后,Passport将建立持久性   登录会话。这对于用户的常见情况很有用   通过浏览器访问Web应用程序。但是,在某些情况下,   会话支持不是必需的。例如,API服务器通常   要求随每个请求提供凭据。当这是   在这种情况下,可以通过设置会话安全地禁用会话支持   选项为false。

因此,基本上,区别在于对于浏览器等客户端,您通常希望具有会话持久性。对于某些情况,当您调用内部API并不需要持久性时,可以禁用会话。