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

Php Laravel 5.2->;5.3 Auth::user()返回null,php,laravel,authentication,laravel-5.2,laravel-5.3,Php,Laravel,Authentication,Laravel 5.2,Laravel 5.3,我已经从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 =

我已经从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()
返回
用户
(如预期)

我还研究了5.3的干净安装和5.2->5.3升级之间的区别。5.3中有两个额外的类不在升级版本中

  • Authenticate.php
  • Authorize.php
这些类由
protected$routeMiddelware
中的
Kernel.php
调用

我也调查过,这不仅不能解决我的具体问题,我也不认为这是一个好的解决方案


有人能解释一下我为什么会遇到这个问题吗?

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

Laravel迁移指南摘录:


在以前版本的Laravel中,您可以访问会话变量或控制器构造函数中经过身份验证的用户。这从来不是该框架的明确特征。在Laravel5.3中,由于中间件尚未运行,您无法访问控制器构造函数中的会话或已验证用户


要访问
\uu构造函数()
中的
Auth::user()
(从Laravel 5.3开始),您需要运行:

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

你不能在你的控制器的构造函数中访问会话或认证用户,因为中间件还没有运行!我投了赞成票,但当心,当你们试图从服务容器中抓取控制器时,这个答案不起作用。你们刚刚救了我一天,先生!就像我想要的那样。谢谢:)
public $user;
public function __construct() {
    $this->middleware(function ($request, $next) {
        $this->user = Auth::user();
        return $next($request);
    });
}