Node.js 使用req.login()刷新passport.js会话数据

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.js。问题是,当我更改用户信息(如用户名)时,直到用户重新登录后才会更改。如果用户注销并再次登录,则信息会更改。但是我想在会话中更改,而不重新登录

我的反序列化用户函数如下所示,它看起来与原始passport的示例不同,因为它是从会话中提取数据,而不是查询数据库。我想提高加载速度,所以我没有在反序列化函数上使用数据库查询

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
(请参阅)@Barnab
req.logIn()
req.logIn()
是相同的:“Passport在req上公开一个logIn()函数(别名为logIn()),该函数可用于建立登录会话。”(来自同一文档)。