Update logged in user details in session


I am using PassportJS with ExpressJS.

I need to update the logged in user details. While I do update this in the DB, how do I update it in the session too so that request.user contains the updated user details?

That is, after updating the database, how do I update the session info on the user as well?

I tried directly assigning the updated details to request.user but it did not work.
I then tried request.session.passport.user – this worked but there is a delay of around 5 to 10 seconds before it gets updated in request.user too.

Is there a function that I need to call that updates the user information stored in the session? Or is there some other object that I can update where the change does not have a delay


I’ve been hunting down an answer for this too. Never mentioned in any docs or tutorials!

What seems to work is, after saving your newly updated user, do 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)

The clue was here… https://github.com/jaredhanson/passport/issues/208

EDIT 2023

Apparently, since [email protected], req.login() now generates a new session ID, which means this approach may no longer work. Stick to the previous version (0.5.3) for now? Here’s a tiny bit more detail .

Answered By – chichilatte

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published