路由器调用 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) })
})
所以我正在使用 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) })
})