Skip to content

fix: reloadで/mypage等の認証必須ページから/loginに誤ってリダイレクトされる #473

Description

@zigzagdev

Bug

ログイン済みの状態で/mypage等の認証必須ページをreloadすると、トークンはlocalStorageに残っているにもかかわらず/loginにリダイレクトされてしまう。

Root cause

<StrictMode>により開発時はAuthProviderのuseEffectが2回実行される。1回目のgetCurrentUser呼び出しはReactのStrict Mode cleanupで即座にabortされるが、AuthProviderはabortされたリクエストかどうかを判定せずにsetUser(null)/setLoading(false)してしまっていた。1回目(abortされた方)のcatchが先に発火して一瞬isLoading=false, user=nullになり、RequireAuthがその状態を見て/loginにリダイレクトする。2回目の本物のリクエストは後で成功するが、その時には手遅れ。

他のhooks(useCreateUser等)はisAbortErrorでabort済みリクエストの結果を無視する実装になっているが、AuthProviderだけこのガードが漏れていた。

Fix

AuthProvider.tsxのgetCurrentUser呼び出しにisAbortErrorガードを追加し、abortされたリクエストの結果で状態を上書きしないようにする。

Acceptance criteria

  • ログイン済み状態で/mypageをreloadしても/loginにリダイレクトされない
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions