Art*_*gio 4 php authentication laravel laravel-5.2 laravel-5.3
我从5.2升级到了5.3,然后Auth::user()又回来了null.
路线
Route::group(['middleware' => ['auth']], function () {
Route::get('/test', 'MyController@showMain');
}
Run Code Online (Sandbox Code Playgroud)
控制器与构造函数调用Auth::check()返回null
public $user;
public function __construct() {
$this->user = Auth::user();
}
public function showMain() {
return $this->user;
}
Run Code Online (Sandbox Code Playgroud)
具有showMain调用Auth::check()返回的控制器User(如预期).
public function __construct() {
// Nothing
}
public function showMain() {
return Auth::user();
}
Run Code Online (Sandbox Code Playgroud)
我还看了一下5.3和5.2-> 5.3的全新安装升级之间的区别.5.3中有2个额外的类没有升级版本.
而且这些类正在由Kernel.phpin 调用protected $routeMiddelware
我还调查了一下\ Auth :: user()在5.3.6中是否为空?,不仅这不能解决我的具体问题,我也不认为这是一个很好的解决方案.
有人可以向我解释为什么我遇到这个问题?
小智 9
从Laravel 5.3开始,无法在控制器构造函数中获取当前登录的用户,因为中间件还没有运行,但在其他控制器方法中,因为你有showMain,所以没有问题.
Laravel迁移指南摘录:
在以前版本的Laravel中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户.这从未打算成为框架的明确特征.在Laravel 5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行.
https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors
要访问Auth::user()的__constructor()(从Laravel 5.3),你需要运行:
public $user;
public function __construct() {
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
return $next($request);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |