最近在作一个项目,须要多表认证,分别为admin
和user
表,我采用的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