赶上passport.authenticate,不明白为什么

时间:2012-11-01 00:23:58

标签: javascript node.js passport.js

当我POST到调用passport.authenticate的端点时,我得不到响应,服务器也没有进入passport.use中定义的策略。在Heroku上,我收到错误H12(超时),在本地我的浏览器响应“没有收到数据。”

我使用有此问题的代码制作了a checkin to GitHub

这不是数据库问题 - 在console.log之前调用.findOne,但永远不会记录该消息。它似乎停在passport.authenticate。为什么呢?

这里发生了什么?还有其他我可以做的诊断吗?

3 个答案:

答案 0 :(得分:2)

结果passport.authenticate(…)返回一个中间件风格的函数。

我通过错误的方式打破了响应链。在我的site.js模块中,exports.login应该设置为passport.authenticate(…)的结果,它不应该调用它,即:

exports.login = passport.authenticate('local', {
  successRedirect: '/result',
  failureRedirect: '/login'
});

答案 1 :(得分:0)

尝试将app.js的line 38更改为:

User.findOne({ id: id }, ...)

User.findById(id, ...)

答案 2 :(得分:0)

尝试将其添加到您的护照配置中

  passport.serializeUser((user, done) => {
    done(null, user);
  });
  passport.deserializeUser((id, done) => {
    User.findById(id).then(user => done(null, user));
  });