Php Laravel 5.2->;5.3 Auth::user()返回null
我已经从5.2->5.3升级,并且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 =
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);
});
}