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

問題描述

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

網上搜索後,並無找到直接的解決方案,而後通過幾回嘗試竟然誤打誤撞地解決了,因此特意記錄下來,但願遇到一樣問題的人不要再在這問題上耗費太多時間。ide

**注意:**這裏並不介紹JWT的工做原理和配置,若是想理解更多請參考如下文章:spa

大體配置

先講一下個人配置。code

auth.php文件以下:jwt

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()獲取到當前認證用戶信息的。token

解決方法

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

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

感謝觀看!string

相關文章
相關標籤/搜索