[英]Laravel 5.8 - Auth::user() with different guards
假設我有以下警衛:
'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();
}
同時,我還使用“管理員”守衛以管理員身份登錄到同一個應用程序,在管理員控制器中,我有以下中間件,為了訪問經過身份驗證的管理員,我執行以下操作: Auth::guard('admin')->user()
public function __construct()
{
$this->middleware('auth:admin');
}
public function edit()
{
$user = Auth::guard('admin')->user();
}
問題是我是否需要在每次訪問管理員用戶時都指定警衛——我注意到,一旦我在構造函數中使用$this->middleware('auth:admin')
進行了身份驗證,我就不再需要指定警衛了在其他 controller 方法中訪問經過身份驗證的用戶? 這是正確的行為嗎
據我所知,您的admin
守衛與web
守衛沒有任何不同。 它使用相同的驅動程序和相同的提供程序。 所以使用Auth::user()
和Auth::guard('admin')->user()
絕對沒有區別。
如果您決定為您的admin
防護實現自定義驅動程序(不同於session
驅動程序),則需要使用Auth::guard('admin')->user()
(或將您的防護設置為默認值)訪問經過身份驗證的用戶。 否則, Auth::user()
將在 session 中查找用戶詳細信息。
附帶說明一下,默認的session
驅動程序會在第一次檢索時緩存用戶實例,在您的情況下,當請求到達auth
中間件時。 通過從緩存中返回用戶實例來處理對Auth::user()
或Auth::guard('admin')->user()
的后續調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.