🔐
Next.jsでAuth0を使ってみた
海外の動画を真似したみたが...
この動画を真似してコンソールの設定をするところまでは良かったが、設定が変わっている部分があるようだ?
ドキュメントのソースコードが違う?
作ったものを参考に練習してみてください。
こちらに完成品あります
Next.js Auth0 Authentication App
このプロジェクトは、Next.js 15.0.3+ App RouterとAuth0を使用した認証システムの実装例です。
機能
- Auth0を使用した認証
- プロフィールページ
- 保護されたルート
- レスポンシブなUI
- TypeScript対応
技術スタック
- Next.js 15.0.3+ (App Router)
- Auth0
- TypeScript
- Tailwind CSS
セットアップ手順
1. プロジェクトのセットアップ
# プロジェクトのクローン
git clone https://github.com/sakurakotubaki/nextjs-oauth-demo
cd nextjs-oauth-demo
# 依存関係のインストール
npm install
2. Auth0のセットアップ
- Auth0ダッシュボードにアクセス
- 新しいアプリケーションを作成(Regular Web Application)
- 以下の設定を行う:
- Allowed Callback URLs:
http://localhost:3000/api/auth/callback
- Allowed Logout URLs:
http://localhost:3000
- Allowed Web Origins:
http://localhost:3000
- Allowed Callback URLs:
3. 環境変数の設定
.env.local
ファイルをプロジェクトのルートに作成し、以下の変数を設定:
AUTH0_SECRET='use [openssl rand -hex 32] to generate a 32 bytes value'
AUTH0_BASE_URL='http://localhost:3000'
AUTH0_ISSUER_BASE_URL='https://[your-auth0-domain].auth0.com'
AUTH0_CLIENT_ID='your-auth0-client-id'
AUTH0_CLIENT_SECRET='your-auth0-client-secret'
4. ファイル構造
auth-app/
├── app/
│ ├── api/
│ │ └── auth/
│ │ └── [...auth0]/
│ │ └── route.ts
│ ├── profile/
│ │ └── page.tsx
│ ├── layout.tsx
│ └── page.tsx
├── src/
│ └── components/
│ ├── buttons/
│ │ └── login-button.tsx
│ └── navigation/
│ └── nav-bar.tsx
├── middleware.ts
└── .env.local
5. 主要コンポーネント
-
Auth0ハンドラー (
app/api/auth/[auth0]/route.ts
):- Auth0の認証フローを処理
-
ミドルウェア (
middleware.ts
):- 保護されたルートへのアクセス制御
- 未認証ユーザーのリダイレクト
-
ナビゲーションバー (
src/components/navigation/nav-bar.tsx
):- ユーザー状態に応じたナビゲーション表示
- ログイン/ログアウトボタン
-
プロフィールページ (
app/profile/page.tsx
):- 認証済みユーザーの情報表示
- 保護されたルートの例
開発サーバーの起動
npm run dev
アプリケーションは http://localhost:3000 で利用可能になります。
保護されたルート
以下のパスは自動的に保護されます:
/profile
/dashboard/*
/api/protected/*
未認証ユーザーは自動的にログインページにリダイレクトされます。
デプロイ
- 本番環境用の環境変数を設定
- Auth0ダッシュボードで本番環境のURLを許可リストに追加
- デプロイ先のプラットフォーム(Vercel推奨)にデプロイ
注意点
-
use client
ディレクティブを使用するコンポーネントは、クライアントサイドでのみ実行される機能に限定 - 環境変数は必ず
.env.local
で管理し、公開リポジトリにコミットしない - 本番環境では適切なセキュリティヘッダーの設定を確認
Discussion