Node.js 使用req.login()刷新passport.js会话数据
我正在使用passport.js。问题是,当我更改用户信息(如用户名)时,直到用户重新登录后才会更改。如果用户注销并再次登录,则信息会更改。但是我想在会话中更改,而不重新登录 我的反序列化用户函数如下所示,它看起来与原始passport的示例不同,因为它是从会话中提取数据,而不是查询数据库。我想提高加载速度,所以我没有在反序列化函数上使用数据库查询Node.js 使用req.login()刷新passport.js会话数据,node.js,session,express,passport.js,Node.js,Session,Express,Passport.js,我正在使用passport.js。问题是,当我更改用户信息(如用户名)时,直到用户重新登录后才会更改。如果用户注销并再次登录,则信息会更改。但是我想在会话中更改,而不重新登录 我的反序列化用户函数如下所示,它看起来与原始passport的示例不同,因为它是从会话中提取数据,而不是查询数据库。我想提高加载速度,所以我没有在反序列化函数上使用数据库查询 passport.deserializeUser(function(userSession, done){ var member = {
passport.deserializeUser(function(userSession, done){
var member = { id : userSession[0], name : userSession[1] };
done(null, member);
});
所以我想我必须像下面那样使用req.login()
,但是会话不会改变
Members.findOne({_id : someId }, function(err, member){
member[username] = req.body.username;
member.save(function (err){
if(err) return next();
console.log('The original session :'+req.sessionId);
req.login(req.user, {}, function(err){
if (err) return next();
console.log('The new session :'+req.sessionId);
res.send(200);
});
})
})
问题是原始会话和新会话相同,如何强制刷新req.user
对象
我修改了这个文档,但没有得到解决方案。
我认为
req.user
对象是在一些中间件中从req.session.passport.user
对象创建的,以方便使用。你可以试着改变一下,看看它是否持续存在。此外,该方法看起来是logIn
,而不是logIn
(请参阅)@Barnabreq.logIn()
和req.logIn()
是相同的:“Passport在req上公开一个logIn()函数(别名为logIn()),该函数可用于建立登录会话。”(来自同一文档)。