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;
}
Controller,showMain
调用 Auth::check()
returns User
(如预期)。
public function __construct() {
// Nothing
}
public function showMain() {
return Auth::user();
}
我还研究了 5.3 的全新安装和升级后的 5.2->5.3 之间的区别。 5.3有2个升级版没有的类
- Authenticate.php
- Authorize.php
这些 类 正在被 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);
});
}
我已经从 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;
}
Controller,showMain
调用 Auth::check()
returns User
(如预期)。
public function __construct() {
// Nothing
}
public function showMain() {
return Auth::user();
}
我还研究了 5.3 的全新安装和升级后的 5.2->5.3 之间的区别。 5.3有2个升级版没有的类
- Authenticate.php
- Authorize.php
这些 类 正在被 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);
});
}