我试图通过执行dd(auth()->user());
在laravel的控制器的constuctor中获取经过身份验证的用户,并且它表示null。我甚至将用户ID添加到我的一个中间件中的请求属性中,如下所示:
$request->attributes->add(['auth_user_id' => $user_id]);
即使我在控制器的构造方法中执行dd($request->get('auth_user_id')
,我也会得到null。但是当我在测试路径中做同样的事情时,两个die转储语句都能很好地工作,并根据我的要求返回用户或用户ID。
为什么我无法在控制器的构造方法中获取这些内容?我甚至能够在我的控制器方法中获得相同的用户ID和auth用户请求。只是不是构造方法。我错过了什么?
答案 0 :(得分:1)
使用Laravel 5.3,引入了此更改,其中在构建控制器类之后初始化中间件。这意味着控制器的Auth --specifically Auth::user()
方法无法使用像__construct()
这样的关键中间件。
请参阅此文档。 https://github.com/laravel/docs/blob/5.3/upgrade.md#session-in-the-constructor
这样您就可以实现所需的功能。
这将允许在控制器的构造函数中注册闭包中间件,以便可以调用任何auth/session
内容并将其设置为控制器上的属性:
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = $request->user();
return $next($request);
});
}
推荐此链接
答案 1 :(得分:0)
我认为这是因为构造函数方法在类初始化时被调用,当时你没有登录,当你没有登录时,你无法获得 auth_user_id 。
但是在普通方法的情况下,它们是在构造方法之后调用的,并且您已经登录了为什么您能够获得 auth_user_id