Inertia.js がシングルページ アプリケーション (SPA) で認証と認可を管理する方法を次に示します。
認証
1. Inertia.js は OAuth のような特別な認証システムを必要としません。代わりに、Laravel のセッションベースの認証システムなど、サーバー側のフレームワークによって提供される認証システムを使用できるようになります。 [3]
2. Laravel のスターター キット、Breeze および Jetstream は、認証機能を含む、新しい Inertia.js アプリケーション用のすぐに使えるスキャフォールディングを提供します。 [3]
3. Inertia.js コンポーネント内の認証済みユーザーにアクセスするには、`Inertia.share()` メソッドを使用して、認証済みユーザーをプロップとしてページに渡すことができます。 [4]
認可
1. リソース タイプに基づく承認 (例: ユーザーが投稿モジュールを表示できるか、新しい投稿を作成できるか) の場合、承認チェックを props として Inertia.js ページ コンポーネントに渡すことができます。 [1][2]
2. 特定のリソース エンティティの承認をチェックするには (例: ユーザーが特定の投稿を編集できるかどうか)、そのエンティティの承認チェックを含む `permissions` 属性を Eloquent モデルに追加できます。次に、この「権限」データをプロップとして Inertia.js コンポーネントに渡すことができます。 [4]
3. 重要なのは、サーバー側で承認チェックを実行し、その結果を props として Inertia.js コンポーネントに渡すことです。これにより、改ざんされる可能性のある認証ロジックがクライアント側に公開されなくなります。 [4]
4. Inertia.js は独自の認証システムを提供せず、サーバー側フレームワーク (Laravel の Gate や Policies など) の認証システムと統合します。 [4]
要約すると、Inertia.js はサーバー側フレームワークの認証システムを利用して認証を管理し、サーバー側でチェックを実行し、結果を props として Inertia.js コンポーネントに渡すことで承認を処理します。このアプローチにより、認証および認可ロジックがサーバー側で安全に保たれます。
引用:[1] https://inertiajs.com/authorization
[2] https://legacy.inertiajs.com/authorization
[3] https://inertiajs.com/authentication
[4] https://sebastiandedeyne.com/handling-authorization-in-a-laravel-and-inertia-application
[5] https://www.youtube.com/watch?v=1xHfpDhuPzA