簡體   English   中英

Laravel 5.8 - Auth::user() 與不同的警衛

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM