解决 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

相关文章
相关标签/搜索