AI を使って Auth0 を統合する
AI を使って Auth0 を統合する
Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使用している場合は、agent skills を使って数分で Auth0 認証を自動的に追加できます。インストール:続けて、AI アシスタントに次のように依頼します:AI アシスタントは、Auth0 アプリケーションの作成、認証情報の取得、
@auth0/nextjs-auth0 のインストール、API ルートの作成、環境変数の設定を自動的に行います。agent skills の詳細なドキュメント →はじめに
Auth0 アプリを設定する
次に、Auth0テナントで新しいアプリを作成し、プロジェクトに環境変数を追加します。Auth0アプリをセットアップするには、次の3つの方法があります。Quick Setupツールを使用する (推奨) 、CLIコマンドを実行する、またはDashboardから手動で設定する方法です。
- クイックセットアップ(推奨)
- CLI
- Dashboard
Auth0アプリを作成し、適切な設定値があらかじめ入力された
.env ファイルをコピーします。プロキシを追加
プロキシコードを
src/proxy.ts に追加します:src/proxy.ts
src/ ディレクトリを使用しているため、proxy.ts ファイルは src/ 内に作成されます。src/ ディレクトリを使用していない場合は、代わりにプロジェクトルートに作成してください。このプロキシは、次の認証ルートを自動的にマウントします。
/auth/login- ログイン ルート/auth/logout- ログアウト ルート/auth/callback- コールバック ルート/auth/profile- ユーザープロフィール ルート/auth/access-token- アクセストークン ルート/auth/backchannel-logout- バックチャネルログアウト ルート
Auth0Provider を使用してレイアウトを更新する
src/app/layout.tsx を更新して Inter フォントを読み込み、アプリを Auth0Provider で囲みます。src/app/layout.tsx
v4 では、Auth0Provider は省略可能です。必要なのは、サーバー レンダリング時に初期ユーザーを渡し、それを
useUser() フックで利用できるようにする場合だけです。アプリを実行する
アプリは http://localhost:3000 で利用できます。Auth0 SDK v4 は、認証ルートを
/auth/* に自動的にマウントします (v3 の /api/auth/* ではありません) 。ポート 3000 が使用中の場合は、npm run dev -- --port 3001 を実行し、Auth0 アプリの callback URL を http://localhost:3001 に更新してください。チェックポイントこれで、Auth0 のログインページが localhost 上で正常に動作しているはずです
トラブルシューティング
JWEDecryptionFailed エラー
JWEDecryptionFailed エラー
JWEDecryptionFailed: decryption operation failed エラーが表示される場合は、AUTH0_SECRET が無効であるか、別のシークレットで暗号化された古いセッションクッキーが原因です。解決策:- 次のコマンドで新しいシークレットを生成します:
.env.localファイルを更新します:
-
localhost:3000のブラウザ cookies を削除します:- Chrome/Edge:
F12キーを押す → [Application] タブ → [Cookies] → localhost の cookies をすべて削除 - Firefox:
F12キーを押す → [Storage] タブ → [Cookies] → localhost の cookies をすべて削除 - Safari: [Develop] メニュー → [Show Web Inspector] → [Storage] タブ → [Cookies] → すべて削除
- Chrome/Edge:
- 開発サーバーを再起動します:
/auth/login での 404 エラー
/auth/login での 404 エラー
ログイン をクリックすると 404 ページが表示される場合は、次の一般的な問題を確認してください:
- プロキシの配置場所:
src/proxy.tsが正しい場所にあることを確認します - プロキシコード: プロキシが手順 6 のコードと一致していることを確認します
- サーバーの再起動: プロキシファイルを作成した後、開発サーバーを再起動します
- import の確認:
import { auth0 } from "./lib/auth0"のパスが正しいことを確認します
Module Not Found エラー
Module Not Found エラー
“Cannot find module ’@/components/LoginButton’” のようなエラーが表示される場合:
- ファイルの存在確認: 手順 3 のファイルがすべて作成されていることを確認します
- パスの確認: コンポーネントが
src/components/ディレクトリにあることを確認します - TypeScript の再起動:
Cmd+Shift+P(Mac) またはCtrl+Shift+P(Windows) を押して、“TypeScript: Restart TS Server” を実行します - import の確認:
@/components/*を使用していることを確認します (~/components/*ではありません)
高度な使い方
v4 の重要な変更点
v4 の重要な変更点
このクイックスタートでは Auth0 Next.js SDK v4 を使用します。v3 から大きな変更があります。
- 動的ルートハンドラーは不要 - 認証ルートはプロキシによって自動的にマウントされます
- クライアント設定の簡素化 -
new Auth0Client()は環境変数を自動的に読み込みます - 新しいルートパス - ルートは
/api/auth/*ではなく/auth/*に配置されます - プロキシが必須 - すべての認証機能は
proxy.ts経由で動作します <a>タグを使用 - ナビゲーションには、onClick を使うボタンではなく<a href="/auth/login">を使用する必要があります
認証ルート
SDK は、プロキシ経由で以下のルートを自動的にマウントします。| Route | Purpose |
|---|---|
/auth/login | ログインを開始 |
/auth/logout | ユーザーをログアウト |
/auth/callback | Auth0 コールバックを処理 |
/auth/profile | ユーザープロフィールを取得 |
/auth/access-token | アクセストークンを取得 |
/auth/backchannel-logout | バックチャネルログアウトを処理 |
これらのルートで 404 エラーが発生する場合は、次の点を確認してください。
proxy.tsファイルが正しい場所にあること (プロジェクトルート、またはsrc/ディレクトリを使用している場合はsrc/内)- 手順 6 に記載の matcher パターンでプロキシが正しく設定されていること
- プロキシファイルの作成後に開発サーバーを再起動していること
サーバーサイド認証
サーバーサイド認証
クライアントサイド認証
クライアントサイド認証
クライアントサイドで認証状態を扱うには、
useUser フックを使用します。components/UserProfile.tsx
API ルートの保護
API ルートの保護
API ルートを保護するには、
withApiAuthRequired メソッドを使用します。app/api/protected/route.ts
サードパーティのバックエンドで Auth0 トークンを使用する
サードパーティのバックエンドで Auth0 トークンを使用する
Auth0 の認証トークンを必要とするサードパーティのバックエンドサービス (Convex、Supabase、Firebase など) を使用している場合は、Next.js アプリからバックエンドクライアントにアクセストークンを渡す必要があります。クライアントサイド:
アクセストークンの取得
サーバーサイド (App Router) :app/api/token/route.ts
lib/convex-client.ts
バックエンドの設定
ほとんどのサードパーティサービスでは、トークンを検証するために Auth0 のドメインとオーディエンスが必要です。バックエンドの設定では、次のように指定します。convex/auth.config.ts
バックエンドで必要になる場合は、Auth0 アプリケーションに API オーディエンスが設定されていることを確認してください。これは Auth0 Dashboard の Applications → APIs で設定するか、
.env.local に AUTH0_AUDIENCE を追加し、それに応じて SDK を設定することで対応できます。トークンに関する問題のトラブルシューティング
バックエンドでctx.auth.getUserIdentity() が null を返す場合:- トークンが渡されていることを確認する: ブラウザーの DevTools の Network タブで、リクエストにトークンが含まれていることを確認します
- トークン形式を確認する:
idTokenではなくaccessTokenを渡していることを確認します - バックエンド設定を確認する: バックエンドに正しい Auth0 のドメインとクライアントIDが設定されていることを確認します
- オーディエンスを確認する: Auth0 API を使用している場合は、
AUTH0_AUDIENCEが設定されており、API 識別子と一致していることを確認します - トークンのクレームを確認する: jwt.io で JWT をデコードし、想定どおりのクレームが含まれていることを確認します