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');
}

Controller 构造函数调用 Auth::check() returns null

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

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

ControllershowMain 调用 Auth::check() returns User(如预期)。

public function __construct() {
    // Nothing
}

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

我还研究了 5.3 的全新安装和升级后的 5.2->5.3 之间的区别。 5.3有2个升级版没有的类

这些 类 正在被 protected $routeMiddelware

中的 Kernel.php 调用

我也研究过 ,这不仅没有解决我的具体问题,而且我认为这也不是一个好的解决方案。

有人可以向我解释为什么我 运行 遇到这个问题吗?

从 Laravel 5.3 开始,无法在控制器构造函数中获取当前登录的用户,因为中间件还没有 运行,但在其他控制器方法中,因为您有 showMain ,没有问题。

Laravel 迁移指南摘录:

In previous versions of Laravel, you could access session variables or the authenticated user in your controller's constructor. This was never intended to be an explicit feature of the framework. In Laravel 5.3, you can't access the session or authenticated user in your controller's constructor because the middleware has not run yet.

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);
    });
}