更新会话中登录的用户详细信息

时间:2014-06-30 15:06:37

标签: node.js express passport.js passport-local

我正在使用PassportJS和ExpressJS。

我需要更新登录的用户详细信息。虽然我在数据库中更新了这个,但是如何在会话中更新它,以便request.user包含更新的用户详细信息?

也就是说,在更新数据库之后,如何更新用户的会话信息?

我尝试直接将更新的详细信息分配给request.user,但它不起作用。 然后我尝试request.session.passport.user - 这有效但是在request.user中更新之前有大约5到10秒的延迟。

我是否需要调用一个更新会话中存储的用户信息的函数?或者是否有一些其他对象可以更新,其中更改没有延迟

3 个答案:

答案 0 :(得分:30)

我也一直在寻找答案。在任何文档或教程中都没有提到过!

在保存新更新的用户后,似乎有效的做法是req.login(user) ...

// "user" is the user with newly updated info
user.save(function(err) {
    if (err) return next(err)
    // What's happening in passport's session? Check a specific field...
    console.log("Before relogin: "+req.session.passport.user.changedField)

    req.login(user, function(err) {
        if (err) return next(err)

        console.log("After relogin: "+req.session.passport.user.changedField)
        res.send(200)
    })
})

线索在这里...... https://github.com/jaredhanson/passport/issues/208

答案 1 :(得分:0)

User.findById(req.user._id,function(err,doc){
        req.logIn(doc,function(err1){

                if(err1){ console.log("Error : "+err1) }
                              else{
                                    res.render("abc.ejs",{user:req.user});
                                    console.log('Item Removed Successfully!!!');
                              }

                        });
                  });

在这里,我们重新登录用户
用户=>猫鼬模型

答案 2 :(得分:0)

由于找不到相似的答案,我今天遇到了类似的问题,并决定分享我的发现。

问题是(从护照文档中复制)我直接从令牌中获取用户数据,该令牌是用户在请求中发送的。当然,这已经过时了。

List<WebElement> iframes = driver.findElements(By.tagName("iframe"));<br/>
if(iframes.size() > 0)<br/>
{<br/>
        // Frames is Present <br/>
        driver.switchTo().frame("a077aa5e"); //switching the frame by ID<br/>
        driver.findElement(By.id(prop.getProperty("pending_email_close_btn_id"))).click();<br/>
        driver.switchTo().defaultContent();<br/>
}else{<br/>
        // No Frames <br/>
        driver.findElement(By.xpath("html/body/a/img")).sendKeys(“----------”);<br/>
}<br/>

而我应该从数据库中获取新鲜的用户对象:

passport.use(new JWTStrategy({
    jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
    secretOrKey   : CONFIG.JWT_SECRET
  },
  function (jwtPayload, cb) {
    return cb(null, jwtPayload);
  }
));