2016-11-03 96 views
3

我已經從5.2 - > 5.3升級,並且Auth::user()返回nullLaravel 5.2 - > 5.3 Auth :: user()返回null

路線

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

控制器與構造調用Auth::check()返回null

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

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

控制器showMain主叫Auth::check()返回User(如預期)。

public function __construct() { 
    // Nothing 
} 

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

我也看過5.3和5.3-> 5.3升級的乾淨安裝之間的區別。 5.3中有兩個額外的類不在升級版本中。

  • Authenticate.php
  • Authorize.php

而這些類是由Kernel.phpprotected $routeMiddelware

叫我也看着\Auth::user() is null in 5.3.6?,這不僅不解決我的具體問題,我也不認爲這是一個好的解決方案。

有人可以向我解釋爲什麼我會遇到這個問題?

+2

你不能訪問會話或身份驗證的用戶您控制器的構造函數,因爲中間件還沒有運行[文檔](https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors) –

回答

6

從Laravel 5.3開始,無法在控制器構造函數中獲取當前登錄的用戶,因爲中間件尚未運行,但在其他控制器方法中,因爲您有showMain,所以沒有問題。

Laravel遷移指南摘錄:

在Laravel的早期版本中,您可以訪問會話變量或控制器的構造函數中身份驗證的用戶。這從來沒有打算成爲框架的明確特徵。在Laravel 5.3中,由於中間件尚未運行,因此無法訪問控制器構造函數中的會話或經過身份驗證的用戶。

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

+0

適合我,TY兄弟! – Marcaum54

3

若要獲取__constructor()訪問Auth::user()(從Laravel 5.3),你需要運行:

public $user; 
public function __construct() { 
    $this->middleware(function ($request, $next) { 
     $this->user = Auth::user(); 
     return $next($request); 
    }); 
} 
相關問題