Laravel

LaravelのAuth::user()が取得できないときの解決方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

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()が使えるようになります。

まずはこれを確認してみてください。

ログインしていなければ、先程の確認方法の出力結果が null になります。

② 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');
});

このように認証のミドルウェアを通してあげれば解決すると思います。

④ セッションが期限切れになっている場合

Auth::user() は、セッションに保存された情報をもとにユーザー情報を取得します。

セッションが期限切れになっている場合は、ユーザー情報が取得できない可能性があります。

この場合は、再度ログインしてセッションを更新する必要があります。

まとめ

以上のように、 Auth::user() でユーザー情報を取得できない場合は、上記の点を確認していくことが重要です。

誰かの参考になればと思います。

感想・苦情は TwitterDM にご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する