Vite + TanStack Router - 6. 認証付きルートの設定
[vite]
[TanStack]
[TanStack Router]
外部の認証サービスを使っている場合、useAuth()
などのフックを使ってユーザーのログイン状態を取得することになりますが、フックはコンポーネント内でしか使えないため、 createFileRoute
のbeforeLoad
では呼び出せません。
そのため、あらかじめ認証状態を取得し、RouterContext
を使って各ルートに伝えるようにします。
手順としては以下のようになります。
RootRoute
をContext付きで作成<App />
コンポーネントで認証状態を取得し、Contextにセット- 各コンポーネントで
context
を参照し、認証状態を確認
1. RootRoute
をContext付きで作成
src/routes/__root.tsx
ファイルでルーターを初期化する際に、createRootRoute
ではなく、createRootRouteWithContext
を使います。
この例ではAuth0を例としてあげています、Auth0の部分はご利用のSaaSに置き換えてください。
注意点として createRootRouteWithContext
は2回呼ぶ必要があります。
2. <App />
コンポーネントで認証状態を取得し、contextにセット
App.tsx
で useAuth0
を呼び出して認証状態を取得し、RouterContext
にセットします。
3. 各コンポーネントでcontext
を参照し、認証状態を確認
コンポーネントでは beforeLoad
で認証状態をContextから読み出し、ログインしていなければredirect()
をスローしてログイン画面に遷移します。
まとめ
beforeLoad
でフックは使えないので、認証状態はContextに入れておく必要がある- Contextを使うには
createRootRouteWithContext
でルートを作る createRootRouteWithContext
は高階関数なので戻り値を再度呼ぶ必要がる