2014-02-21 3 views
7

Я использую passport.js с локальной стратегией аутентификации для своего приложения node.js/express.Как я могу заставить обновление req.user?

Пользователь, который был возвращен 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(); 
    }); 

}); 

ответ

7

Вы должны быть в состоянии назвать 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(); 
}); 
+0

Одна вещь, которую я должен был наблюдать, заключалась в том, чтобы передавать req.logIn как переменную и вызывать ее позже, поскольку контекст, который он называет (от req), важен для того, как работает промежуточное программное обеспечение. – Zugwalt

Смежные вопросы