我正在使用PassportJS和ExpressJS。
我需要更新登录的用户详细信息。虽然我在数据库中更新了这个,但是如何在会话中更新它,以便request.user包含更新的用户详细信息?
也就是说,在更新数据库之后,如何更新用户的会话信息?
我尝试直接将更新的详细信息分配给request.user
,但它不起作用。
然后我尝试request.session.passport.user
- 这有效但是在request.user中更新之前有大约5到10秒的延迟。
我是否需要调用一个更新会话中存储的用户信息的函数?或者是否有一些其他对象可以更新,其中更改没有延迟
答案 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);
}
));