AIに質問した回答
次、breezeを入れるときに参考にする用。
Laravelのガード(Guard)について説明します。
Laravelなどのフレームワークでは、認証機能を定義する仕組みを「ガード」と呼びます。
ガードとは
認証システムの「方法」を定義するコンポーネントです。つまり、「どのように」ユーザーを認証するかを決定します。Webアプリケーション → セッションガード
モバイルアプリ → Sanctumガード(APIトークン)
外部サービス → Sanctumガード(APIトークン)Laravelのauthミドルウェアとauth:sanctumミドルウェアの主な違いを説明します:
authミドルウェア
- セッションベースの認証を使用
- 主にWebアプリケーションで使用
- Bladeテンプレートを使用する従来のLaravelアプリケーション
- auth.phpのデフォルトガード(通常は'web')を使用
<?php Route::middleware('auth')->group(function () { // セッションベースの認証が必要なルート });
auth:sanctumミドルウェア
- APIトークンベースの認証を使用
- SPAやモバイルアプリのAPIで使用
- Vue.js, React, Angular などのSPA
- Bearerトークンによる認証
- クロスオリジンリクエストに対応
<?php Route::middleware('auth:sanctum')->group(function () { // APIトークン認証が必要なルート });
sanctumの設定ファイルの場所
api/vendor/laravel/sanctum/src/SanctumServiceProvider.php
動作の仕組み
以下のように使用する時:
Route::middleware('auth:sanctum')->group(function () { // APIトークン認証が必要なルート });
以下の処理が行われます:
1. リクエストが来た時に
auth:sanctum
ミドルウェアが起動
2. リクエストヘッダーのAuthorization: Bearer {token}
を確認
3. トークンの検証
4. 認証成功/失敗の判定主な処理の流れは:
(AIのやつコピペしたけどqiitaってこんな図みたいの書けるんだ)
Laravelのbreeze:installコマンドでapiオプションを選択すると、自動的にSanctumが設定されます。
php artisan breeze:install api
特徴的な違い:
セッション認証(Web):
- クッキーベース
- CSRF保護が必須
- サーバーサイドでセッション管理
Sanctumトークン認証(API):
- Bearer tokenベース
- ステートレス
- クライアントサイドでトークン管理
なお、SPAでもSanctumのstateful機能を使うとセッションベースの認証も可能です。これはconfig/sanctum.phpのstateful配列で設定できます。