【问题标题】:how can I force a refresh of req.user?如何强制刷新 req.user?
【发布时间】:2015-01-06 23:52:06
【问题描述】:

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

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

我想让用户能够在应用中更新他们的电子邮件或用户名。发生这种情况时,我想告诉护照重新加载用户(类似于他们刚刚登录),以便 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();
    });

});

【问题讨论】:

    标签: node.js session express passport.js


    【解决方案1】:

    您应该能够在请求上调用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();
    });
    

    【讨论】:

    • 我必须注意的一件事是将 req.logIn 作为变量传递并稍后调用它,因为它被调用的上下文(来自 req)对于中间件的工作方式很重要。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 2010-11-16
    • 2015-11-25
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多