在PassportJS Google OAuth策略中,由于一些奇怪的原因,当我序列化用户ID并将其发送到cookie以发送到浏览器时,它不会返回id来反序列化它,这告诉我因为当我console.log
用户时,它返回undefined
,
passport.deserializeUser((id, done) => {
User.findById(id).then((user, done) => {
console.log(user);
done(null, user);
});
});
详细说明我的cookie在下面
app.use(cookieSession({
maxAge: 24 * 60 * 60 * 1000,
keys: 'dkfehfhgddf'
}));
如果您使用的是Mongoose,则表示您的代码中存在错误,导致意外行为。
如果您尝试使用findById()
功能的Promise版本,则必须在之后调用.exec()
,以便发送操作。此外,你已经遮蔽了deserializeUser
的done
回调,所以它永远不会被调用。
这是它应该如何工作:
passport.deserializeUser((id, done) => {
User.findById(id).exec()
.then(user => {
if (user) {// user may be null
done(null, user);
} else {
done(new Error("User not found"), null);
}
})
.catch(error => {
done(error, false);
});
});