让我们说我有以下警卫:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'users',
],
],
我使用默认的“网络”防护以普通用户身份登录我的应用,并访问经过身份验证的用户,我可以使用以下命令:$user = Auth::user();
public function __construct()
{
$this->middleware('auth');
}
public function edit()
{
$user = Auth::user();
}
同时,我还使用“ admin”保护程序以管理员身份登录到同一应用程序,并且在管理员控制器中,我具有以下中间件,并且要访问经过身份验证的管理员,请执行以下操作:Auth::guard('admin')->user()
>
public function __construct()
{
$this->middleware('auth:admin');
}
public function edit()
{
$user = Auth::guard('admin')->user();
}
问题是我是否需要每次访问管理员用户时都指定防护措施-我注意到使用$this->middleware('auth:admin')
在构造函数中进行身份验证后,我不再需要指定防护措施来访问经过身份验证的人员用户内部其他控制器方法?这是正确的行为
答案 0 :(得分:0)
据我所知,您的admin
后卫与web
后卫没有做任何不同的事情。它使用相同的驱动程序和相同的提供程序。因此,使用Auth::user()
和Auth::guard('admin')->user()
绝对没有区别。
如果您确实决定为session
防护实现自定义驱动程序(不同于admin
驱动程序),则需要使用Auth::guard('admin')->user()
(或将防护设置为默认值) )访问经过身份验证的用户时。否则,Auth::user()
将在会话中查找用户详细信息。
请注意,默认的session
驱动程序在第一次检索时就缓存用户实例,在您的情况下,即请求到达auth
中间件时。通过从缓存返回用户实例来处理对Auth::user()
或Auth::guard('admin')->user()
的后续调用。