auth0-laravel について
Laravel 11以上のWebアプリに`auth0/login`でAuth0認証を追加するスキルです。ログイン、ログアウト、プロフィールに加え、Laravelのガードやミドルウェアの設定を扱います。
主な機能
- 01Auth0 Laravel SDKの設定
- 02ログイン・コールバック・ログアウトルートの自動登録
- 03Laravelガード経由でのユーザーとクレームの取得
- 04authミドルウェアによるルート保護
活用シーン
- 01Laravel WebアプリへのAuth0ログイン追加
- 02保護されたルートでのプロフィール参照
- 03セッションベースのWeb認証の設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ auth0/ agent-skills --skill auth0-laravelインストール後、Claude Code で/auth0-laravelを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api.mdintegration.mdsetup.md詳細
Auth0 Laravel Web アプリ統合
auth0/login(Laravel Auth0 SDK)を使用して、Laravel Web アプリケーションにログイン、ログアウト、ユーザープロファイルを追加します。
前提条件
- Laravel 11+ アプリケーション
- 拡張機能
mbstring、openssl、jsonを含む PHP 8.2+ - Composer がインストール済みであること
- Auth0 の Regular Web Application を設定済みであること(API ではなく、Application である必要があります)
- Auth0 のセットアップがまだの場合は、まず
auth0-quickstartスキルを使用してください
使用しないケース
| シナリオ | 代わりに使用 |
|---|---|
| JWT Bearer 検証を行う Laravel API | auth0-laravel-api(ステートレスなトークンガード) |
| フレームワークを使用しないプレーン PHP の Web アプリ | auth0-php |
| プレーン PHP の API | auth0-php-api |
| シングルページアプリケーション | auth0-react、auth0-vue、または auth0-angular |
| Next.js アプリケーション | auth0-nextjs |
| Node.js Web アプリ | auth0-express または auth0-fastify |
| Flask Web アプリ | auth0-flask |
クイックスタートのワークフロー
1. SDK をインストールする
composer require auth0/login
auth0/login パッケージには auth0/auth0-php(v8.19 以降)が必要で、自動的にインストールされます。また、PSR-18 HTTP クライアントも必要です。まだインストールしていない場合は、Guzzle をインストールしてください。
composer require guzzlehttp/guzzle guzzlehttp/psr7
2. 設定を公開する
php artisan vendor:publish --tag=auth0
これにより、ガード、ミドルウェア、ルートの設定を含む config/auth0.php が作成されます。
3. 環境を設定する
.env に追加します。
APP_URL=http://localhost:8000
AUTH0_DOMAIN=your-tenant.us.auth0.com
AUTH0_CLIENT_ID=your_client_id
AUTH0_CLIENT_SECRET=your_client_secret
AUTH0_AUDIENCE=https://your-api-identifier
AUTH0_REDIRECT_URI=${APP_URL}/callback
AUTH0_DOMAIN は Auth0 テナントのドメインです(https:// を除く)。AUTH0_CLIENT_ID と AUTH0_CLIENT_SECRET は、Auth0 Application の設定で確認できます。AUTH0_AUDIENCE には、Auth0 に登録された API 識別子(Auth0 Dashboard > Applications > APIs)を設定する必要があります。設定しない場合、Auth0 は SDK がデコードできない不透明なアクセストークンを返すため、セッションの復元時にクラッシュします。SDK はデフォルトで APP_KEY を Cookie のシークレットとして使用するため、別途シークレットを設定する必要はありません。
重要: 組み込みの開発サーバー(http://localhost:8000)を使用する場合は、APP_URL にポート番号が含まれていることを確認してください。Laravel の新規インストールでは、デフォルトで http://localhost(ポート番号なし)に設定されるため、コールバック URL が一致しなくなります。
4. Auth0 Dashboard を設定する
Auth0 Application の設定で、次のようにします。
- Application Type:Regular Web Application
- Allowed Callback URLs:
http://localhost:8000/callback - Allowed Logout URLs:
http://localhost:8000
5. Auth ガードを設定する
config/auth.php を更新して、Auth0 ガードを使用します。
'guards' => [
'web' => [
'driver' => 'auth0.authenticator',
'provider' => 'auth0-provider',
'configuration' => 'web',
],
],
'providers' => [
'auth0-provider' => [
'driver' => 'auth0.provider',
'repository' => 'auth0.repository',
],
],
configuration キーは、config/auth0.php のガード定義に対応します(web はセッションベースの認証に STRATEGY_REGULAR を使用します)。デフォルトの web ガードを上書きすることで、ガード名を指定しなくても Laravel 標準の auth ミドルウェアと auth()->user() が機能します。SDK は同じ設定で auth0-session ガードも自動登録しますが、web を上書きするほうが簡単です。
6. ルートは自動登録される
config/auth0.php で registerAuthenticationRoutes が true の場合、SDK は次のルートを自動登録します。
GET /login- Auth0 Universal Login にリダイレクトしますGET /callback- OAuth コールバックを処理し、コードをトークンと交換しますGET /logout- セッションを破棄し、Auth0 のログアウトにリダイレクトします
認証フローのルートを手動で定義する必要はありません。
7. 保護されたルートを追加する
routes/web.php に追加します。
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('home', ['user' => auth()->user()]);
});
Route::middleware('auth')->group(function () {
Route::get('/profile', function () {
return view('profile', ['user' => auth()->user()]);
});
});
標準の auth ミドルウェアは Auth0 ガードで動作します。認証されていないユーザーは /login にリダイレクトされます。
8. ビューを作成する
resources/views/home.blade.php を作成します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home</title>
</head>
<body>
@if($user)
<h1>Welcome, {{ $user->name }}!</h1>
<p><a href="/profile">Profile</a></p>
<p><a href="/logout">Logout</a></p>
@else
<h1>Welcome</h1>
<p><a href="/login">Login</a></p>
@endif
</body>
</html>
resources/views/profile.blade.php を作成します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Profile</title>
</head>
<body>
<h1>{{ $user->name }}</h1>
<p>Email: {{ $user->email }}</p>
<img src="{{ $user->picture }}" alt="avatar" width="100" />
<hr>
<h2>User Claims</h2>
<pre>{{ json_encode($user->jsonSerialize(), JSON_PRETTY_PRINT) }}</pre>
<p><a href="/">Home</a> | <a href="/logout">Logout</a></p>
</body>
</html>
9. 認証をテストする
php artisan serve
http://localhost:8000 にアクセスして、Login をクリックします。
重要: アプリには必ず http://localhost:8000 経由でアクセスしてください(http://127.0.0.1:8000 ではなく)。コールバック URL では localhost を使用するため、Auth0 へのログインリダイレクト後もセッション Cookie を保持するには、localhost 用に設定する必要があります。127.0.0.1 を使用すると、セッション Cookie が localhost のコールバック URL に送信されず、「Invalid state」エラーが発生します。
よくある間違い
| 間違い | 修正方法 |
|---|---|
Laravel で auth0/auth0-php を直接使用する | SDK を Laravel のガード、ミドルウェア、ルートでラップした auth0/login を使用します |
| Auth0 Dashboard でアプリを SPA タイプとして作成する | サーバー側のセッション認証には、Regular Web Application である必要があります |
| Auth0 Dashboard にコールバック URL が設定されていない | Allowed Callback URLs に http://localhost:8000/callback を追加します |
| Auth0 Dashboard にログアウト URL が設定されていない | Allowed Logout URLs に http://localhost:8000 を追加します |
| 設定を公開していない | 設定前に php artisan vendor:publish --tag=auth0 を実行します |
| ガードのドライバー名が間違っている | ドライバーは auth0.authenticator です(auth0 や auth0.guard ではありません) |
APP_KEY の設定を忘れている | php artisan key:generate を実行します。SDK はこれを Cookie シークレットとして使用します |
Auth0::getCredentials() を直接呼び出す | Laravel の auth()->user() を使用します。SDK はガード経由で統合されます |
/login、/callback、/logout のルートを手動で定義する | ルートはサービスプロバイダーによって自動登録されます |
AUTH0_DOMAIN に https:// プレフィックスを付ける | ドメインのみを指定します。https://tenant.us.auth0.com ではなく tenant.us.auth0.com を使用します |
ミドルウェアなしで $request->user() を使用する | auth ミドルウェアが適用されたルートでのみ使用できます |
AUTH0_AUDIENCE 環境変数が設定されていない | オーディエンスがないと、Auth0 は SDK が解析できない不透明なトークンを返します。その結果、「JWT string must contain two dots」エラーが発生します |
http://localhost:8000 ではなく http://127.0.0.1:8000 にアクセスする | 127.0.0.1 向けに設定されたセッション Cookie は localhost のコールバックには送信されず、「Invalid state」エラーが発生します |
$user->getName() や $user->getEmail() を使用する | StatefulUser はマジックメソッド __get を使用します。$user->name、$user->email、$user->picture を使用します |
主要な SDK メソッド
| メソッド | 使用場所 | 目的 |
|---|---|---|
auth()->user() | ルート/コントローラー内 | 認証済みの StatefulUser または null を返します |
auth()->check() | ルート/コントローラー/ビュー内 | ユーザーが認証済みの場合に true を返します |
auth()->guard('web') | 複数のガードを使用する場合 | 特定の Auth0 ガードインスタンスを取得します |
$user->name | ユーザーオブジェクト上 | ユーザーの表示名(__get マジック経由) |
$user->email | ユーザーオブジェクト上 | ユーザーのメールアドレス(__get マジック経由) |
$user->picture | ユーザーオブジェクト上 | ユーザーのアバター URL(__get マジック経由) |
$user->getAuthIdentifier() | ユーザーオブジェクト上 | Auth0 の sub クレームを返します |
$user->getAttribute('claim') | ユーザーオブジェクト上 | 任意のクレーム値を明示的に返します |
$user->jsonSerialize() | ユーザーオブジェクト上 | すべてのユーザークレームを配列として返します |
ユーザーオブジェクト
認証済みユーザーは、Laravel の Authenticatable コントラクトを実装する StatefulUser インスタンスです。クレームには、__get マジックによってプロパティ形式でアクセスできます。
$user = auth()->user();
$user->name; // display name (via __get)
$user->email; // email address (via __get)
$user->picture; // avatar URL (via __get)
$user->email_verified; // any claim via property access
$user->getAuthIdentifier(); // Auth0 'sub' (e.g. 'auth0|abc123')
$user->getAttribute('sub'); // explicit claim access
$user->jsonSerialize(); // all claims as array
ID トークンのクレームには、プロパティとしてアクセスできます。例:$user->nickname、$user->updated_at、$user->sub など。明示的にアクセスする場合は、$user->getAttribute('claim_name') を使用します。
関連スキル
auth0-laravel-api- JWT Bearer トークン検証で Laravel API ルートを保護しますauth0-php- フレームワークを使用しない、プレーン PHP の Web アプリauth0-quickstart- Auth0 の初期設定auth0-mfa- 多要素認証を追加しますauth0-cli- ターミナルから Auth0 リソースを管理します
クイックリファレンス
ガード設定(config/auth.php):
'guards' => [
'web' => [
'driver' => 'auth0.authenticator',
'provider' => 'auth0-provider',
'configuration' => 'web',
],
],
'providers' => [
'auth0-provider' => [
'driver' => 'auth0.provider',
'repository' => 'auth0.repository',
],
],
ルートの保護:
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});
Blade で認証状態を確認する:
@auth
<p>Hello, {{ auth()->user()->name }}</p>
@else
<a href="/login">Login</a>
@endauth
環境変数:
APP_URL- ポートを含むアプリケーション URL(例:http://localhost:8000)AUTH0_DOMAIN- Auth0 テナントのドメイン(例:tenant.us.auth0.com)AUTH0_CLIENT_ID- アプリケーションのクライアント IDAUTH0_CLIENT_SECRET- アプリケーションのクライアントシークレットAUTH0_AUDIENCE- API 識別子(JWT アクセストークンに必須)AUTH0_REDIRECT_URI- コールバック URL(デフォルトは${APP_URL}/callback)APP_KEY- Laravel アプリのキー。Cookie の暗号化シークレットとして使用されます
詳細ドキュメント
- セットアップガイド - 自動セットアップスクリプト、環境設定、Auth0 CLI の使用方法
- インテグレーションガイド - スコープの確認、API の呼び出し、イベント、カスタムユーザーモデル、セッション管理
- API リファレンス - ガード API の全機能、設定オプション、ユーザーモデルのメソッド