[英]Laravel 5.2 -> 5.3 Auth::user() returning null
我從5.2 - > 5.3升級, Auth::user()
返回null
。
路線
Route::group(['middleware' => ['auth']], function () {
Route::get('/test', 'MyController@showMain');
}
控制器與構造函數調用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.2-> 5.3的全新安裝升級之間的區別。 5.3中有2個額外的類沒有升級版本。
而這些類是由被稱為Kernel.php
在protected $routeMiddelware
我還調查了一下\\ Auth :: user()在5.3.6中是否為空? ,不僅這不能解決我的具體問題,我也不認為這是一個很好的解決方案。
有人可以向我解釋為什么我遇到這個問題?
從Laravel 5.3開始,無法在控制器構造函數中獲取當前登錄的用戶,因為中間件還沒有運行,但在其他控制器方法中,因為你有showMain ,所以沒有問題。
Laravel遷移指南摘錄:
在以前版本的Laravel中,您可以在控制器的構造函數中訪問會話變量或經過身份驗證的用戶。 這從未打算成為框架的明確特征。 在Laravel 5.3中,您無法訪問控制器構造函數中的會話或經過身份驗證的用戶,因為中間件尚未運行。
https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors
要在__constructor()
啟動Auth::user()
(從Laravel 5.3開始),您需要運行:
public $user;
public function __construct() {
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
return $next($request);
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.