解決 Laravel JWT 多表認證時獲取不到當前認證用戶的問題


解決 Laravel JWT 多表認證時獲取不到當前認證用戶的問題

4Ark 創建於1年前, 最后更新於 1年前   版本號 #1   2987 views   1 likes   

問題描述

最近在做一個項目,需要多表認證,分別為adminuser表,我采用的JWT認證方式,但今天遇到了一個問題:使用Auth::user()返回null,也就是說無法獲得當前認證的用戶。

網上搜索后,並沒有找到直接的解決方案,然后經過幾次嘗試居然誤打誤撞地解決了,所以特地記錄下來,希望遇到同樣問題的人不要再在這問題上耗費太多時間。

注意:這里並不介紹JWT的工作原理和配置,如果想理解更多請參考以下文章:

大致配置

先講一下我的配置。

auth.php文件如下:

 
return [
    'defaults' => [
        'guard' => env('AUTH_GUARD', 'admin'),
    ],
    'guards' => [
        'admin' => [
            'driver' => 'jwt',                           #### 更改為JWT驅動
            'provider' => 'admins',
        ],
        'user' => [
            'driver' => 'jwt',                           #### 更改為JWT驅動
            'provider' => 'users',
        ],
    ],
    'providers' => [
        'admins' => [
            'driver' => 'eloquent',
            'model'  => \App\Admin::class,        #### 指定用於token驗證的模型類
        ],
        'users' => [
            'driver' => 'eloquent',
            'model'  => \App\User::class,        #### 指定用於token驗證的模型類
        ],
    ],
    'passwords' => [
        //
    ],
];

問題的根源

auth.php中,我們有兩個guard,而默認的guard指向的是admin,這時候如果是user經過的驗證的話,是無法通過Auth::user()獲取到當前認證用戶信息的。

解決方法

解決方法很簡單,只要使用Auth::guard('user')指明使用哪個guard即可,這里我是通過公用的控制器中的一個方法:

 
public function getAuthUser($guard = 'admin'){
    return Auth::guard($guard)->user();
}

感謝觀看!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM