Skip to main content
@auth0/auth0-react-router は現在 Beta 版 (1.0.0-beta.2) です。安定版 1.0 のリリースまでに API が変更される可能性があります。

AI を使って Auth0 を統合する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントをお使いの場合は、エージェントスキルを使えば、数分で Auth0 認証を自動的に追加できます。インストール:
次に、AI アシスタントに次のように依頼します:
AI アシスタントが、Auth0 アプリケーションの作成、資格情報の取得、@auth0/auth0-react-router のインストール、プロバイダーの構成、ルートのセットアップまでを自動で行います。エージェントスキルの詳細なドキュメント →
前提条件: 始める前に、以下がインストールされていることを確認してください。
  • Node.js 18 以降 (20 LTS 推奨)
  • npm 9 以降、yarn 1.22 以降、または pnpm 8 以降
  • jq - Auth0 CLI でのセットアップに必要
  • React Router のフレームワークモード (v7 以降、react-router.config.ts があること)

はじめに

このクイックスタートでは、React RouterアプリケーションにAuth0の認証を追加する方法を説明します。Auth0 React Router SDKを使用して、ログイン、ログアウト、ユーザープロファイルの機能を備えたセキュアなアプリを構築します。SDKはOIDCフローをサーバー側で処理し、セッションをJWEで暗号化されたクッキーに保存するため、トークンがブラウザーに渡ることは一切ありません。
1

新しい React Router プロジェクトを作成する

このクイックスタート用に、新しい React Router プロジェクトを作成します。
プロジェクトを開きます。
既存のReact RouterアプリにAuth0を追加する場合は、この手順を省略してください。
2

Auth0 React Router SDKをインストールする

3

Auth0を設定する

Auth0アプリケーションを作成し、コールバックURLとログアウトURLを設定します。
4

環境変数を設定する

プロジェクトのルートに .env ファイルを作成します。
.env は決してバージョン管理にコミットしないでください。最初のコミットを行う前に、必ず .gitignore に追加しておきましょう。
5

Auth0のサーバーインスタンスを作成する

app/auth0.server.ts を作成します。.server.ts という接尾辞が付いたファイルは React Router のバンドラーによってクライアントバンドルから除外されるため、シークレットをサーバー側だけに留めておけます。
app/auth0.server.ts
6

認証ルートを追加する

/auth/* 配下のすべてのパスを処理するスプラットルートを作成します。handleAuth は、URL のパスと HTTP メソッドに応じて、内部で handleLogin、handleCallback、handleLogout、handleBackchannelLogout に処理を振り分けます。
app/routes/auth.$.tsx
ルート設定にルートを登録します。
app/routes.ts
7

ルートレイアウトを設定する

app/root.tsx に Auth0Provider と rootAuthLoader を追加します。rootAuthLoader はセッションクッキーを復号し、認証状態をプロバイダーに渡します。トークンがブラウザーに送信されることはありません。
app/root.tsx
Auth0Provider は useRouteLoaderData('root') からセッションデータを読み取るため、ルートのルート (root route) の id を root にする必要があります。ファイルベースのルーティングでは、React Router がファイル名をもとにこの id を自動で設定します。カスタムのルート設定を使用する場合は、layout() の呼び出しに { id: 'root' } を渡してください。
8

ログインとログアウトを追加

組み込みのコンポーネントを使用して、ログインボタンとログアウトボタンを表示します。LoginButton は /auth/login に、LogoutButton は /auth/logout にリダイレクトします。OIDC フローは Auth0 が処理し、サインイン後にユーザーをアプリへリダイレクトして戻します。
app/routes/_index.tsx
9

ユーザープロファイルを表示

useUser Hooksを使うと、任意のクライアントコンポーネントから認証済みユーザーのプロフィールにアクセスできます。さらにローダーで requireSession と組み合わせれば、ページのレンダリング前に未認証のリクエストをサーバー側でブロックできます。
app/routes/profile.tsx
10

アプリケーションを実行する

ブラウザーで http://localhost:5173 を開き、Log in をクリックします。Auth0のユニバーサルログインページにリダイレクトされます。サインインすると、アプリにリダイレクトされて戻ってきます。
これで、アプリのログインとログアウトが機能するようになりました。セッションはJWEで暗号化されたクッキーに保存され、アクセストークンはサーバー上に保持されるため、ブラウザーに送信されることはありません。

トラブルシューティング

**原因:**セッションクッキーの発行後にAUTH0_SESSION_SECRETが変更されたか、値が32文字未満です。解決方法:localhostのブラウザークッキーを削除し、AUTH0_SESSION_SECRETが32文字以上であることを確認してから、開発サーバーを再起動してください。新しいシークレットはopenssl rand -hex 32で生成できます。
**原因:**Auth0が受け取ったリダイレクトURLが、Allowed Callback URLsに登録されたどの値とも一致していません。解決方法:Auth0 Dashboardで [Applications] > [Applications] に移動してアプリを選択し、[Application Settings] で [Allowed Callback URLs] がhttp://localhost:5173/auth/callbackに設定されていることを確認します。末尾のスラッシュや余分な空白があれば削除し、[Save Changes] をクリックしてください。
原因:auth.$.tsxスプラットルートが存在しないか、routes.tsに登録されていません。解決方法:app/routes/auth.$.tsxが存在し、app/routes.tsにroute('auth/*', 'routes/auth.$.tsx')が含まれていることを確認してください。routes.tsを編集した後は、開発サーバーを再起動してください。
原因:rootAuthLoaderがapp/root.tsxからエクスポートされていないか、ルートルートのidがrootになっていません。解決方法:app/root.tsxでexport const loader = ({ request }) => rootAuthLoader(request)がエクスポートされていることを確認してください。カスタムのルート構成を使用している場合は、ルートレイアウトをlayout('root.tsx', { id: 'root' }, [...routes])として登録してください。
原因:defineRouteAuthとauth0Middlewareを使用するには、ミドルウェアAPIが導入されたReact Router 7.9.0以降が必要です。解決方法:react-routerを>=7.9.0にアップグレードしてください。または、各ローダーでrequireSession / requireUserを使用して、ルートを個別に保護することもできます。

高度な使い方

.envにAUTH0_AUDIENCEを追加し、APIの識別子を設定します (識別子はAuth0 Dashboard → Applications > APIs → API Settings → Identifierで確認できます) 。次に、ローダー内でgetAccessTokenを使用します。この方法なら、トークンがブラウザーに渡ることはありません。
app/routes/data.tsx
defineRouteAuthミドルウェア (React Router 7.9.0以降) を使用すると、ルート単位でロールによるアクセス制御を適用できます。ロールはデフォルトでhttps://auth0.com/claims/rolesクレームから読み取られます。
app/routes/admin.tsx
必要なロールを持たないリクエストには403が返されます。
SDKは、@auth0/auth0-spa-jsをベースにした完全なクライアント側モードでも動作します。.envにVITE_AUTH0_DOMAINとVITE_AUTH0_CLIENT_IDを追加すると、Auth0Providerがこれらを自動的に検出してPKCEフローに切り替えます。ほかにコードを変更する必要はありません。
AUTH0_*変数とVITE_AUTH0_*変数を同時に設定しないでください。ハイブリッドモードはサポートされていないため、両方が設定されていると、SPAでログアウトしてもサーバー側のセッションクッキーが削除されません。