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

Router calls passport.serialize but never executes handler

所以我正在使用 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()。

哔哔声是怎么回事??

我在 done 中引用了一个 'err',其中没有从回调传递的错误

已修复:

  // 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) })
  })