簡體   English   中英

Laravel 5.2 - > 5.3 Auth :: user()返回null

[英]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個額外的類沒有升級版本。

  • Authenticate.php
  • Authorize.php

而這些類是由被稱為Kernel.phpprotected $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM