1

Laravel 5.3 を使用して、独自の API を使用する Web アプリをセットアップしました。認証は Passport によって正常に処理されました。Web アプリは、ルートで認証ミドルウェアを使用し、承認のためにモデル ポリシーを使用します。API ルーティングは、デフォルトの「auth:api」トークン ガードを使用してアクセスを制御します。

アプリ/ポリシーで API 認証と Web 認証に同じポリシーを使用したいのですが、方法がわかりません。などの通話$this->authorize('view', $model)はできません。Auth::guard('api')->user()どうにかしてユーザーをポリシーに渡す必要があると思いますか?

どんな助けでも大歓迎です!

更新: 動作しました。

API 呼び出しでも、Laravel は Web ガードのユーザーを使用してポリシーをチェックしているようです。このユーザーは、API 呼び出しに対して未定義です。そのため、すべての API 呼び出しで api ガードを使用する必要があることを Laravel に伝える必要がありました。

  1. Auth::shouldUse('api');handle 関数で新しいミドルウェアを作成します。
  2. ミドルウェアをカーネルの api セクションに割り当てます。

Laravel は、すべての API リクエストに対して api ガードを使用するようになりました。like の呼び出し$this->authorize('view', $model)は、Web と API の両方で機能します。

4

2 に答える 2