所以我使用的是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()。
哔哔声在发生什么?
答案 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) })
})