【问题标题】:When to set session to false when using passport with Nodejs将护照与Nodejs一起使用时何时将会话设置为false
【发布时间】:2019-09-19 16:14:07
【问题描述】:

我刚刚使用 passport.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
}));

在登录路径中。

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

【问题讨论】:

    标签: node.js passport.js


    【解决方案1】:

    试试下面:

    请确保您使用最新版本的护照(今天是 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

    【讨论】:

    • 如果您觉得这个答案有用,请点赞回答并采纳!
    【解决方案2】:

    这取自 passport.js 的docs

    禁用会话

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 2011-02-10
      • 1970-01-01
      • 2019-06-23
      • 2016-02-28
      • 1970-01-01
      • 2017-07-15
      • 2012-04-08
      相关资源
      最近更新 更多