Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 674
callmekatootie Avatar asked Jun 30 '14 15:06

callmekatootie


1 Answers

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

like image 78
chichilatte Avatar answered Oct 07 '22 02:10

chichilatte