2016-11-03 35 views
3

私は5.2 - > 5.3からアップグレードしました。Auth::user()nullです。Laravel 5.2 - > 5.3 nullを返すAuth :: user()

ルート

Route::group(['middleware' => ['auth']], function() { 
    Route::get('/test', '[email protected]'); 
} 

コントローラコンストラクタと(予想通り)Auth::check()戻りUserを呼び出すshowMainとコントローラnull

public $user; 
public function __construct() { 
    $this->user = Auth::user(); 
} 

public function showMain() { 
    return $this->user; 
} 

Auth::check()リターンを呼び出します。

public function __construct() { 
    // Nothing 
} 

public function showMain() { 
    return Auth::user(); 
} 

また、5.3と5.2 - 5.3のクリーンインストールの違いを見てきました。 5.3には、アップグレードされたバージョンにない2つの余分なクラスがあります。

  • Authenticate.php
  • Authorize.php

そして、これらのクラスは、私はまただけでなく、\Auth::user() is null in 5.3.6?に見てきたこれはないprotected $routeMiddelware

Kernel.phpで呼ばれています私の特定の問題を解決する、私はまたそれが良い解決策だとは思わない。

誰かが私にこの問題を抱えている理由を説明することはできますか?

+2

あなたのセッションまたは認証されたユーザーにアクセスすることはできませんミドルウェアがまだ実行されていないためにコントローラのコンストラクタを使用しています(https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors) –

答えて

6

ミドルウェアはまだ実行されていないが、他のコントローラメソッドでは、showMainのように、Laravel 5.3からコントローラのコンストラクタで現在ログインしているユーザを取得できないため、問題はありません。

Laravel移行ガイドの抜粋:Laravelの以前のバージョンでは

は、あなたはセッション変数や、コントローラのコンストラクタで認証されたユーザーにアクセスすることができました。これは決してフレームワークの明白な特徴ではありません。 Laravel 5.3では、ミドルウェアがまだ実行されていないため、コントローラのコンストラクタでセッションまたは認証されたユーザにアクセスすることはできません。あなたが実行する必要があります

https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

+0

私のために働く、TYさん! – Marcaum54

3

(Laravel 5.3で始まる)__constructor()Auth::user()へのアクセスを取得するには、次の

public $user; 
public function __construct() { 
    $this->middleware(function ($request, $next) { 
     $this->user = Auth::user(); 
     return $next($request); 
    }); 
} 
関連する問題