在 Laravel5.3.19 中获取构造函数内部的身份验证数据

Get authentication data inside of Constructor issue in Laravel5.3.19

我已将 Laravel 从 4.2 升级到 laravel5.3,但我无法访问控制器构造函数中的身份验证数据

我有如下中间件,但它对我不起作用

use App\Http\Controllers\BaseController;

use Closure;
use Illuminate\Contracts\Auth\Guard;
use Redirect;
use Auth;
use App\User;


class DashboardController extends BaseController
{

    public $user;

    public function __construct(Guard $guard, User $user)
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            return $next($request);
        });
        //$this->userID = Auth::user()?Auth::user()->id:null;

        dd($user);// Result attributes: []
        dd($guard);
        dd($this->user);

    }

}

DD()后的结果

dd($guard);

DD($this->user);

NULL

当我添加用户 属性 时它将 return 为空。

这是意料之中的事情。您必须在 middleware 闭包内分配用户的原因是因为会话中间件还没有 运行。因此,您上面的闭包直到执行过程的后期才会真正被调用。

如果您将 dd($this->user) 移动到中间件闭包内部或移动到该控制器中的其中一个路由方法,它应该可以正常工作。

此外,仅供参考,在您的中间件闭包中,您可以从请求中获取 user 实例,即 $request->user() 将为您提供经过身份验证的用户。

希望对您有所帮助!