【问题标题】:Laravel 5.2 -> 5.3 Auth::user() returning nullLaravel 5.2 -> 5.3 Auth::user() 返回 null
【发布时间】:2017-03-17 15:09:54
【问题描述】:

我已经从 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;
}

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

public function __construct() {
    // Nothing
}

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

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

  • Authenticate.php
  • Authorize.php

这些类被Kernel.phpprotected $routeMiddelware中的protected $routeMiddelware调用

我也研究过\Auth::user() is null in 5.3.6?,这不仅不能解决我的具体问题,我也不认为这是一个好的解决方案。

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

【问题讨论】:

  • 由于中间件尚未运行docs,您无法在控制器的构造函数中访问会话或经过身份验证的用户

标签: php laravel authentication laravel-5.2 laravel-5.3


【解决方案1】:

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

Laravel 迁移指南摘录:

在以前的 Laravel 版本中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户。这从未打算成为框架的明确功能。在 Laravel 5.3 中,您无法在控制器的构造函数中访问会话或经过身份验证的用户,因为中间件尚未运行。

https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors

【讨论】:

  • 为我工作,T​​Y 兄弟!
【解决方案2】:

要访问 __constructor() 中的 Auth::user()(从 Laravel 5.3 开始),您需要运行:

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

【讨论】:

  • 我赞成,但请注意,当您尝试从服务容器中获取控制器时,此答案不起作用
  • 先生,您救了我的命!完全按照我想要的方式工作。谢谢你:)
猜你喜欢
  • 2016-05-13
  • 2017-04-11
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 2019-09-20
  • 2021-01-02
  • 2020-08-14
  • 2017-06-29
相关资源
最近更新 更多