Laravel5.4 で認証を通したアクセスに対して、コントローラのコンストラクタでユーザモデルの値を取得しようと思ったら、なぜか Auth::user() の値が取得できなくて悩みました。
1 2 3 4 5 6 7 | public function __construct() { // 認証情報を取得 $user = \Auth::user(); // nullになる \Log::debug($user); } |
auth の middleware は通過して認証は OK になっていて、コントローラのコンストラクタ以外のメソッドでは問題なく取得できます。
そんな時、こんな情報に行き当たりました。
・Laravel 5.3 コントローラのコンストラクタの重要な変更
まさに同様の考え方で、認証が必要なコントローラでは、各コントローラまたは継承している親のコントローラのコンストラクタで、認証情報を使った共通の処理を書きたくなるケースがあるのですよね。
結論としては、コンストラクタで以下のように書けば使えるようになりますが、あくまでもこの中だけでしか参照できないので注意です。
1 2 3 4 5 6 7 8 9 10 | public function __construct() { $this->middleware(function ($request, $next) { // 認証情報を取得 $user = Auth::user(); // ex) ユーザーの認証情報を使った親クラスの処理を呼び出す $this->hogehoge($user); return $next($request); }); } |