【Laravel】APIリクエストでauth()->user()がnullになってしまって詰まった
結論
要するに
auth()->user()
を使うと、Laravelはdefault guardを使う。- default guardは
config/auth.php
で定義されている。僕の場合は以下だった(大体そうであろう)
'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ],
解決策
auth:api
ミドルウェアを通す
Route::group(['middleware' => 'auth:api'], function () { // your route here });
のように、auth:apiミドルウェアを通すとLaravelがdefault guardではなくapi guardを使ってくれる。
ただし、これだと「認証ユーザのみがアクセス可能なroute」になってしまうので、認証状態に関係なくアクセスできて、認証状態に応じて処理を変えたい場合などに対応できない。 その場合は次の方法が良さそう。
認証ユーザ情報取得時にguardを設定する
auth()->guard('api')->user()
のようにすると、api guardを使って認証情報を取得できる。
$request->user('api')
や\Auth::guard('api')->user()
でも同じ意味。