解决 Laravel JWT 多表认证时获取不到当前认证用户的问题

问题描述

最近在做一个项目,需要多表认证,分别为adminuser表,我采用的JWT认证方式,但今天遇到了一个问题:使用Auth::user()返回null,也就是说无法获得当前认证的用户。

网上搜索后,并没有找到直接的解决方案,然后经过几次尝试居然误打误撞地解决了,所以特地记录下来,希望遇到同样问题的人不要再在这问题上耗费太多时间。

注意:这里并不介绍JWT的工作原理和配置,如果想理解更多请参考以下文章:

大致配置

先讲一下我的配置。

auth.php文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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即可,这里我是通过公用的控制器中的一个方法:

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

感谢观看!


作者 : 4Ark
来源 : https://4ark.me
著作权归作者所有,转载请联系作者获得授权。

🥳 加载 Disqus 评论