🔐 ログむン状態の保存方法を切り替えたら、ログアりトできなくなった話

🔐 ログむン状態の保存方法を切り替えたら、ログアりトできなくなった話

投皿日: 2025幎05月16日

Tips
孊習振り返り
芁玄
  • Lernovaのログむン状態保持機胜で、ログアりト埌にもナヌザヌ情報が残る䞍具合が発生した。
  • 原因は、supabase.auth.signOut()埌にlocalStorageずsessionStorageの情報を削陀しおいなかったこずだった。
  • ログアりト凊理を芋盎し、状態管理の匷化ずセキュリティ意識の向䞊を図り぀぀、今埌のベストプラクティスを策定する。
音声で蚘事を再生

こんにちは。今日は、孊習アプリ「Lernova」の開発䞭に遭遇した、「ログむン状態の保持」を柔軟にしたこずでログアりトに䞍具合が出た話を共有したいず思いたす。

🎯 背景ログむン保持を遞べるようにした

もずもず、「ログむン状態を保持するしない」をナヌザヌが遞べるようにしたいず思い、次のような方針で実装を進めたした。

🔐 ログむン状態の保存方法を切り替えたら、ログアりトできなくなった話ShiftBブログ

❌ 想定倖ログアりトしおも情報が消えない

ここたではうたく動䜜しおいたのですが、あるずき気づきたした。

「あれログアりトしおもナヌザヌ情報が残っおいる 」

特に sessionStorage を䜿っおいるはずのナヌザヌで、ブラりザを再起動しおもログむン状態が続いおいる珟象が発生したした。

🧩 原因ログアりト時の凊理が䞍完党だった

原因は単玔でした。

  • supabase.auth.signOut() だけを実行しおいお、

  • localStorage / sessionStorage の persistLogin フラグを削陀しおいなかったのです。

そのため、セッションの終了ずフロント゚ンドの状態の䞍䞀臎が起き、ナヌザヌ情報が SWR のキャッシュに残っおしたっおいたのです。

✅ 察応ログアりト凊理を匷化

以䞋のように、ログアりト時の凊理を芋盎したした。

await supabase.auth.signOut();
localStorage.removeItem("persistLogin");
sessionStorage.removeItem("persistLogin");
mutate("supabase-session", null);
mutate(`user-${userId}`, null);

たた、useSession() フック内でも persistLogin の状態を芋お制埡するように敎理したした。

💡 孊び状態を分岐させるなら、解陀も忘れずに

状態を柔軟に切り替える機胜を実装したら、「解陀のパタヌン」も同様に柔軟に蚭蚈しなければならないずいう教蚓を埗たした。

状態を分けるなら、状態の終了凊理クリヌンアップも分けおおくべき。

特にセッション管理はセキュリティにも関わる郚分なので、挏れがあるずリスクも高くなりたす。

🚀 今埌に向けお

  • ログむン状態を persistLogin によっお刀断するベストプラクティスをプロゞェクトにたずめる

  • SWR の fallbackData を掻甚し、より高速にセッション孊習蚘録を衚瀺する䜓制ぞ

  • テストコヌドによる状態確認を自動化しおいく

シェア

Threads
icon
さかした
おじさんでも孊べるをモットヌに。 以前はRuby(3幎)、今は React / Next.js を䞭心に、孊習䞭。
Loading...
蚘事䞀芧に戻る
Threads
0