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) res.send(200) }) }) The clue was here... https://github.com/jaredhanson/passport/issues/208
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With