我正在使用passport.js。问题是当我更改用户名等用户信息时,在用户重新登录之前不会更改。如果用户注销并再次登录,则信息已更改。但我想在没有重新登录的情况下更改会话。
我的deserializeUser函数如下所示,它看起来与原始护照的示例不同,因为它是来自会话而不是查询数据库的拾取数据。我想加载速度,所以我没有在反序列化函数上使用数据库查询。
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
对象?
我重写此文档但没有得到解决方案。 https://github.com/jaredhanson/passport/issues/208