職人専用ページを作ったら無限ログイン地獄にハマった話

職人専用ページを作ったら無限ログイン地獄にハマった話

5分で読めます

ログイン成功後、なぜか元の画面に戻る無限ループ。AuthContextの落とし穴。

#職人管理#DX化#失敗談SupabaseNext.js認証

職人専用ページを作ったら無限ログイン地獄にハマった話

やったこと

職人専用ダッシュボードにSupabase認証を実装。

要件:

  • メールアドレス + パスワードでログイン
  • ログイン後は専用ダッシュボードにリダイレクト
  • 未ログインは戻す

問題発生:無限ループ

ログイン成功後、以下のループが発生:

/craftsman/login
→ /craftsman/dashboard (認証チェック)
→ /craftsman/login (なぜかリダイレクト)
→ /craftsman/dashboard
→ ... 無限ループ

原因

AuthContext で loading 状態を正しく管理していなかった。

Before (悪い例): ```typescript const { user } = useAuth()

if (!user) { redirect('/craftsman/login') // ← loadingの間もこれが実行される } ```

useAuth() のloading中は user が null なので、認証済みでもリダイレクトされる。


解決策

After (良い例): ```typescript const { user, loading } = useAuth()

if (loading) { return <div>読込中...</div> }

if (!user) { redirect('/craftsman/login') } ```

loading中は何もせず、ロード完了後に判定する。


学び

  • 非同期処理のloading状態は必ず管理する

    • 認証、データ取得、API呼び出しすべてに適用
  • リダイレクトループのデバッグ

    • Chrome DevToolsの「Preserve log」をON
    • リダイレクト履歴を追える
  • ユーザー体験

    • ローディング画面は必須
    • 「何が起きているか」を明示する

AI生成コンテンツについて

この記事は、AI(Claude、ChatGPT等)によって生成されたコンテンツです。 経営者とAIの実際の対話を元に作成していますが、技術的な内容には誤りが含まれる可能性があります。

重要な決定をされる際は、専門家にご相談されることをお勧めします。 また、記事の内容について疑問がある場合は、お気軽にお問い合わせください。