web-dev-qa-db-ja.com

セッションでログインしたユーザーの詳細を更新する

ExpressJSでPassportJSを使用しています。

ログインしたユーザーの詳細を更新する必要があります。 DBでこれを更新しますが、request.userに更新されたユーザーの詳細が含まれるように、セッションでも更新するにはどうすればよいですか?

つまり、データベースを更新した後、ユーザーのセッション情報も更新するにはどうすればよいですか?

更新された詳細をrequest.userに直接割り当てようとしましたが、機能しませんでした。次に、request.session.passport.userを試しました。これは機能しましたが、request.userでも更新されるまでに約5〜10秒の遅延があります。

セッションに保存されているユーザー情報を更新するために呼び出す必要のある関数はありますか?または、変更に遅延がない場合に更新できる他のオブジェクトはありますか

24
callmekatootie

私もこれに対する答えを探し続けてきました。ドキュメントやチュートリアルで言及されたことはありません!

動作しているように見えるのは、新しく更新したユーザーを保存した後、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)
    })
})

手がかりはここにありました... https://github.com/jaredhanson/passport/issues/208

34
chichilatte