イントロダクション
JetstreamはファーストパーティとしてLaravel Sanctumを統合しています。Laravel SanctumはSPA(single page applications)モバイルアプリケーションのための軽い認証システムであり、シンプルなトークンベースのAPIです。Sanctumによりアプリケーションの各ユーザーは複数のAPIトークンを生成することができます。どのアクションの実行を許可するのかを指定するアビリティ/パーミッションをトークンへ付加できます。
デフォルトではAPIトークン生成パネルは、ユーザープロフィールドロップダウンメニューの右上にある"API"リンクからアクセスします。このスクリーンでユーザーは様々なパーミッションを持つSanctum APIトークンを生成できます。
{tip} Sanctumの詳細とどのようにSanctum認証APIへリクエストを発行するかは、Sanctumのドキュメントを参照してください。
APIサポートの有効化
アプリケーションでサードパーティへAPIを提供する場合、JetstreamのAPI機能を有効にしてください。そのためには、config/jetstream.php
設定ファイルのfeatures
設定オプションにある関連するエントリのコメントを外します。
'features' => [
Features::profilePhotos(),
Features::api(),
Features::teams(),
],
パーミッションの定義
APIトークンで使用できるパーミッションは、アプリケーションのJetstreamServiceProvider
で、Jetstream::permissions
を使用し定義します。パーミッションは単なる文字列です。定義できたら、APIトークンへ割り付けます。
Jetstream::defaultApiTokenPermissions(['read']);
Jetstream::permissions([
'create',
'read',
'update',
'delete',
]);
defaultApiTokenPermissions
メソッドは新しいAPIトークン生成時に、どのパーミンションをデフォルトとするかを指定するために使います。もちろん、もちろんユーザーはトークン作成前にデフォルトパーミッションのチェックを外せません。
受信リクエストの認証
Jetstreamアプリケーションへ向けて送られるリクエストはすべて、たとえroutes/web.php
ファイルで認証済みのルートであっても、Sanctumトークンオブジェクトと関連付けられます。Laravel\Sanctum\HasApiTokens
トレイトが提供するtokenCan
メソッドを使用し、特定のパーミンションがトークンに関連付けられているかを判定できます。このトレイトはJetstreamのインストールにより、アプリケーションのApp\Models\User
モデルへ自動的に適用されています。
$request->user()->tokenCan('read');
ファーストパーティUIが開始するリクエスト
ユーザーがroutes/web.php
ファイル中のルートへリクエストを送ると、そのリクエストは通常クッキーベースのweb
ガートを通じてSanctumにより認証されます。このシナリオではアプリケーションのUIを通じ、ユーザーがファーストパーティリクエストを作成するため、tokenCan
メソッドは常にtrue
を返します。
最初、この振る舞いは奇妙に思えるでしょう。しかし、APIトークンが利用可能であり、
tokenCan
メソッドにより調べられると常に想定できるため便利です。つまり、アプリケーションの承認ポリシー内ではリクエストにトークンが関連付けられていないことを心配せず、常にこのメソッドを呼び出すことができます。