路由器调用passport.serialize但从不执行处理程序

时间:2015-07-13 20:09:37

标签: node.js session express passport.js passport-local

所以我使用的是Node,Express和Passport。我正在记录用户并序列化会话,如下所示:

      passport.serializeUser(function(user, done) {
      done(null, user.id);
  });


  // Deserializes the user session after a request has been completed.
  passport.deserializeUser(function(id, done) {
      new User().get(id)
      .then(function(user) {
          console.log("deserialized:" + user.name)
          done(err, user);
      })
  })


  passport.use('local', new LocalStrategy(
    function(username, password, done) {
      new User().login(username, password)
      .then(function (user) {
        if (!user) //case where username (id, handle, email) is not found in database
        {
          return done(null, false, { message: 'Login failed.' })
        }
        return done(null, user)
      })
      .fail(function (err) {
        return done(err)
      })
    }))

这一切都有效,但随后所有的后续路由处理程序都会调用passport.serializeUser / passport.deserializeUser,但永远不会自行执行。

所以:

  router.get('/logout', function(req, res){
    console.log("Logging user out")
    req.logout(); //.logout is a passport method attached to every req object
    res.redirect('/');
  });

没有console.log或实际上调用logout()。

哔哔声在发生什么?

1 个答案:

答案 0 :(得分:1)

我在完成时引用了'错误',其中没有从回调中传递错误

这解决了它:

  // Deserializes the user session after a request has been completed.
  passport.deserializeUser(function(id, done) {
      new User().get(id)
      .then(function(user) {
          console.log("deserialized:" + user.alias)
          done(null, user);
      })
      .fail(function (err) { done(err) })
  })