【问题标题】:Passport serializeUser() is not called with this authenticate() callback不使用此 authenticate() 回调调用 Passport serializeUser()
【发布时间】:2016-07-31 05:27:42
【问题描述】:

使用 passport.js,我以这种方式编写路由,因此我可以访问 MongoDb 文档 userDoc。但是,当这样做时... passport.serializeUser() 将永远不会被调用,req 对象将丢失 user

auth.route('/auth/facebook/callback')
  .get(function(req, res, next) {
    passport.authenticate('facebook', function(err, userDoc, info) {
      if (err) { return next(err); }
      // I don't think !userDoc will ever happen because of mongo upsert
      if (!userDoc) { return res.redirect('/login'); }
      res.cookie('facebookPicUrl', userDoc.value.facebook.picture, {maxAge : 9999999,
        httpOnly: false,
        secure: false,
        signed: false
      });

      res.redirect('http://localhost:9000/users')
    })(req, res, next);
  });

但如果我这样写,req.user 应该是这样的:

auth.route('/auth/facebook/callback')
  .get(passport.authenticate('facebook', { failureRedirect: '/login' }),
       function(req, res) {
      res.redirect('http://localhost:9000/users')
    });

我怎样才能使它成为调用passport.serializeUser 并且user 存在于req 并且我还可以访问mongoDb 对象的位置?

【问题讨论】:

  • 我不确定他们是否更新了文档,但这是自定义回调部分末尾的说明:“回调可以使用提供的参数来根据需要处理身份验证结果。请注意,当使用自定义回调时,应用程序负责建立会话(通过调用 req.login())并发送响应。"

标签: node.js mongodb express passport.js


【解决方案1】:

由于您使用的是自定义身份验证回调,因此您负责建立会话。

请注意,当使用自定义回调时,它会成为应用程序的 建立会话的责任(通过调用req.login())和 发送响应。

一旦登录操作完成,req.login()user 对象分配给请求对象req 作为req.user

例如,您可以在文档中看到 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, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

【讨论】:

  • 哇!据我了解,这在 Passport.js 网站上没有记录。他们说 passport.authenticate() 调用 req.login() 但我不知道如果提供自定义回调必须手动调用它。文档太模糊了!
  • 我同意,这在网站上根本没有记录@OzzyTheGiant
  • 你拯救了我的一天。花了很多时间尝试弄清楚并添加登录解决了身份验证问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2016-07-23
  • 2014-11-30
  • 2017-10-05
相关资源
最近更新 更多