最近在作一個項目,須要多表認證,分別爲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