Node.js Passport会话-我希望在会话中存储用户信息,但在浏览器中仅存储id
在passport的文档中,我可以通过以下方式进行序列化和反序列化:Node.js Passport会话-我希望在会话中存储用户信息,但在浏览器中仅存储id,node.js,passport.js,Node.js,Passport.js,在passport的文档中,我可以通过以下方式进行序列化和反序列化: passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); 因为他们说:“在典型的web应用程序中,用
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
因为他们说:“在典型的web应用程序中,用于验证用户身份的凭据仅在登录请求期间传输。如果验证成功,将通过用户浏览器中的cookie集建立和维护会话。”
但我在会话中需要更多信息,例如用户的admin标志,所以我编写了以下代码:
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
findUser(user.username).then((result)=>{
done(null,result)
})
});
现在,当我执行console.info(req.session)时——之后,我得到了我想要的:
passport: {
user: {
_id: '60658af35cecea3308639385',
username: 'Test1',
password: '$2b$10$ScrsMi51eUFi4.Iv49aTC.BD/OIuGgtRN9l4R9OGUj3hZEecI9MIC',
admin: 0
}
}
但我现在有一个问题:
所以,如果我不是按文档中的id而是按整个用户的id,entrie用户现在是id吗?所有这些信息都在我用户的cookies浏览器中吗?如何在会话中准确存储,例如admin flag-有关此用户的更多信息,但不能仅在会话中存储在其浏览器中。您可以使用express session,它可以存储数据并尽可能保密。下面是一个使用它的示例。
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))