🙄

passportをver6以降に上げるときの注意点

2024/02/22に公開

passport v6以降の問題点

passportのversionを6以上にあげた場合、ログイン前に使用していたセッションの情報が失われてしまう。
例えばログイン処理を実行する前に次のようにセッションにデータを格納しておいたとする。

request.session.customData = "customData";

その後、passportを使用してログインし、先ほどsessionに登録したcustomDataの確認するとundefinedという結果になってしまう。

console.log(request.session.customData); //undefined

この動作はpassportのver6ではセッションが再生成されるとき、再生成される前に保存されていた情報がクリアされるために引き起こされる。

対処方法

passportのauthenticate()とreq#loginとreq#logoutはoptionのパラメータとしてkeepSessionInfoオプションがver6以降受け取られるようになっているので、keepSessionInfoオプションをtrueに設定することで本問題を対処することができる。例えば以下のような形でオプションを設定する。

passport.authenticate('authProvider', { keepSessionInfo: true });

参考資料

https://github.com/jaredhanson/passport/blob/master/CHANGELOG.md#060---2022-05-20

Discussion