Passport.js – req.session.passport.user没有显示出来

我使用Express来使用Passport.js – 由于某些原因,req.session.passport.user值不存在,应该如下所示:

在这里输入图像说明

这里是我的护照configuration:

passport.serializeUser(function (user, done) { console.log(colors.bgRed('serialize user called, user:', user)); done(null, user._id); }); passport.deserializeUser(function (id, done) { console.log(colors.bgRed('deserialize user called, user_id:', id)); UserModel.getNewUser().findById(id, function (err, user) { console.log(colors.bgRed('deserialize find user called, user:', user)); done(err, user); }); }); passport.use('local', new LocalStrategy(function (username, password, done) { UserModel.getNewUser().findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } // req.user = user; return done(null, user); }); })); 

有谁知道什么可能会出错? 我唯一的猜测是,我可能需要反序列化使用会话对象,而不是用户名,但我相信是不正确的。 我知道一个事实,即反序列化User和SerializeUser根本没有被调用。

网上很难find答案,所以我觉得应该去这里。

问题是因为没有使用这个:

  app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' })); 

…我决定用Passport的这种呼叫方式:

 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.authenticate('local', function (err, user, info) { if (err) { return next(err); } if (!user) { registerUser(req,res,next); } else{ res.locals.loggedInUser = user._doc; res.json({alreadyRegistered: !justRegistered,msg:user._doc}); } })(req, res, next); 

但后来我更新了req.log像这样:

 passport.authenticate('local', function (err, user, info) { if (err) { return next(err); } if (!user) { console.log('no account found, so we will register user as expected...'); registerUser(req,res,next); } else{ req.logIn(user, function (err) { //this is crucial if(err){ return next(err); } res.locals.loggedInUser = user._doc; res.json({alreadyRegistered: !justRegistered,msg:user._doc}); }); } })(req, res, next); 

现在起作用了 – 应该更好地跟踪文档。 我build议Jared Hansson在我上面标记的文档中提到“这是至关重要的”。 否则,是的,我应该更密切地关注文档。