0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

passport.jsのserializeUser, deserializeUserが動かない

Posted at

passport.jsのserializeUserとdeserializeUserが動かない

// // ユーザ情報をセッションへ保存
passport.serializeUser((id, done)=> {
  console.log("serialize:" + id)
  done(null, id);
});

//IDからユーザ情報を取得しreq.userに格納する
passport.deserializeUser(async (id, done) =>{
  console.log("deserialize:"+ id);
  const user=await User.findOne({_id:id});
  done(null,user);
});

動作確認のためにconsole.logでIDの出力を試みたが一向に出力されず、解決に1週間以上要したため原因と解決策を記録する。

原因

私はpackage.jsonに以下のようなproxy設定を行なっていました。

"proxy": "http://localhost:5000"

にもかかわらず、、、
よくあるユーザ名とパスワードを入力する画面のログインボタンを押した時に、実行されるhandleSubmit関数内に以下のような記述をしてしまっていたのだ。

await axios.post("http://localhost:5000/api/auth/login");

つまり、「http://localhost:5000」 の部分が重複していることによってserializeUserとdeserializeUserの実行がスキップされていたのだ。axios内のパスを/api/auth/loginに変更することで無事に動作していることを確認できた。

まとめ

今回のバグは初歩的なミスであるが、passport.jsの基本的な実装は概ね合っていた為エラーが出力されず、バグの特定に非常に時間がかかった。もし実装は合っているはずなのにうまく動作しないと思ったら、初歩に立ち戻ってaxios内のパスやproxyの設定がうまくいっているかどうか確認してみてほしい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?