質問: ### ゴール サービスプロバイダの中でも、認証情報を提供するGuardの種類を、アクセスの出元(web、api etc)によって自動判別させたい ### 状況 サービスプロバイダで自作サービスを登録し、register()メソッドでサービスに auth()->user()を紐づけています。 これをPassportで認証をしたAPI経由で 利用しようとしていますが、 この条件でresolveすると auth()->user() がNullになります。 サービスプロバイダの外(Controllerなど)でauth()->user()をすると認証情報が取れます。 また、サービスプロバイダの中でも auth()->guard('api')->user() これならユーザーが取れます。 ※api という名前にpassport認証ドライバを紐づける設定を書いています。 この現象から、デフォルトの認証方式であるsessionGuardを見に行ってるのは想像つくのですが... さすがにこれを毎回書くのは不便です。 どうすればサービスプロバイダの中でも、外と同じように経路を考慮した認証情報を取得してくれるようになるでしょうか。
回答: framework/AuthManager.php at 5.8 · laravel/framework ミドルウェアで `shouldUse` を呼ぶのがアーキテクチャ的に正しい方法ですね。但しこれはミドルウェアを自作せずとも Laravel デフォルトの `auth` (`Authenticate`) ミドルウェアが引数でサポートしています。 ルーティング時に `->middleware('auth:api')` などとコロンの後に Guard のエイリアス名を指定するとその Guard を使用してくれます。 【Laravel】 認証や認可に関する補足資料 - Qiita