Обновление информации о пользователе в сеансе

Я использую PassportJS с ExpressJS.

Мне нужно обновить зарегистрированные данные пользователя. Хотя я обновляю это в БД, как мне его обновить в сеансе, так что request.user содержит обновленные данные пользователя?

То есть, после обновления базы данных, как мне также обновить информацию о сеансе пользователя?

Я попытался напрямую назначить обновленные данные request.user, но это не сработало. Затем я попробовал request.session.passport.user - это сработало, но есть отсрочка около 5-10 секунд, прежде чем он будет обновлен в request.user тоже.

Есть ли функция, которую мне нужно вызвать, которая обновляет информацию пользователя, хранящуюся в сеансе? Или есть какой-то другой объект, который я могу обновить там, где изменение не имеет задержки

Ответы

Ответ 1

Я тоже искал ответ для этого. Никогда не упоминается ни в каких документах или учебниках!

Что, кажется, работает, после сохранения вашего недавно обновленного пользователя сделайте req.login(user)...

// "user" is the user with newly updated info
user.save(function(err) {
    if (err) return next(err)
    // What happening in passport 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