我如何强制刷新req.user?

我正在使用本地身份validation策略passport.js为我的node.js / express应用程序。

LocalStrategy返回的用户包括电子邮件和用户名等内容。

我想让用户能够更新他们的电子邮件或用户名内的应用程序。 发生这种情况时,我想告诉护照重新加载用户(就像他们刚刚login一样),以便req.user在会话的其余部分反映已更新的更改。 简单地设置它似乎不会超过这一个请求。

简单的例子:

 app.get('/changeEmail', function(req, res, next) { var userId = req.user.id; var origEmail = req.user.email; var newEmail = req.param('email'); userDao.updateEmail(userId, newEmail, function(err) { if (!err) { // user's email has changed, need change reflected in req.user from this point on req.user.email = newEmail; } next(); }); }); 

您应该可以调用请求上的logIn方法。 这将调用serializeUser方法来更新会话。

 userDao.updateEmail(userId, newEmail, function(err) { if (!err) { // user's email has changed, need change reflected in req.user from this point on var user = req.user; user.email = newEmail; req.logIn(user, function(error) { if (!error) { // successfully serialized user to session } }); } next(); });