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



我刚刚用护照完成了注册身份验证.js但是当我尝试使用登录身份验证时,我不断收到错误

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

这是我的邮政路线:

    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!")
        }
        })

我看到一个关于stackoverflow的评论,说我们需要做:

app.post('/login', passport.authenticate('local', {
  successRedirect: '/accessed',
  failureRedirect: '/access',
  session: false
}));

在登录路由中。

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

这是取自护照.js的文件。

禁用会话

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

所以基本上,区别在于,对于浏览器等客户端,您通常希望具有会话持久性。对于调用内部 API 并且实际上不需要持久性的情况,您可以禁用会话。

试试下面:

请确保您使用最新版本的护照(今天的护照版本为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 - 自定义回调并将会话设置为 false

最新更新