LaravelのAuth::user()でユーザー情報が取得できないときの解決方法
いつもご利用ありがとうございます。このブログは、広告費によって運営されています。
Laravel の Auth::user()が null となり、ユーザー情報が取得できないときの解決方法についてまとめました。
確認方法
新しい機能を追加するときに、コンローラーや blade 上で
Auth::user()
を使おうとしたら、うまくいかないことがあります。
そのときは、どうしてうまくいかないのか、とりあえず確認しましょう。
コントローラーなどの php ファイルのときは、
dd(Auth::user());
blade.php ファイルのときは、
{{ dd(Auth::user()) }}
で出力してみましょう。
もし、API などの実装で、非同期通信しているときはログで確認しましょう。
\Log::info(Auth::user());
storage/logs/laravel.log に出力されます。
この記事では、このときの出力が「null」になっていたときの解決方法となります。
解決方法
① そもそもログインしていない可能性がある
相談を受けた時に、意外とあります。
普通にログインすると Auth::user()が使えるようになります。
まずはこれを確認してみてください。
api.php に書いている(セッションによる認証の時)
認証情報というのは、認証のミドルウェアを通っていないと取得することはできません。
ルーティングを設定する、routes/web.php や routes/api.php にはあらかじめ複数のミドルウェアを通るように設定が書かれていますが、
routes/web.php には、最初からセッションによる認証のミドルウェアを通る設定がされています。
しかし、api.php にはセッションによる認証のミドルウェアは設定されていません。
なので、認証が取れない可能性があります。
どうすれば良いか?
web.php に書きましょう。
このパターンの多くは、API で非同期通信を実装したいようなときに発生すると思うので、
api の prefix をつけたいのだと思います。
web.php に
Route::prefix('api')->group(function() {
Route::get('/sample', 'SampleController@index');
});
このように書いたらどうでしょうか。
LaravelPassport など、API 認証しているとき
前述のとおり、
- 認証情報というのは、認証のミドルウェアを通っていないと取得することはできません。
routes/api.php
Route::middleware('auth:api')->group(function() {
Route::get('/sample', 'SampleController@index');
});
このように認証のミドルウェアを通してあげれば解決すると思います。
まとめ
以上です。
誰かの参考になればと思います。
感想・苦情は TwitterDM にご連絡ください。
それでは!
人気記事