解決 Laravel JWT 多表認證時獲取不到當前認證用戶的問題
由 4Ark 創建於1年前, 最后更新於 1年前 版本號 #1 2987 views 1 likes
問題描述
最近在做一個項目,需要多表認證,分別為admin
和user
表,我采用的JWT
認證方式,但今天遇到了一個問題:使用Auth::user()
返回null
,也就是說無法獲得當前認證的用戶。
網上搜索后,並沒有找到直接的解決方案,然后經過幾次嘗試居然誤打誤撞地解決了,所以特地記錄下來,希望遇到同樣問題的人不要再在這問題上耗費太多時間。
注意:這里並不介紹JWT
的工作原理和配置,如果想理解更多請參考以下文章:
大致配置
先講一下我的配置。
auth.php
文件如下:
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
即可,這里我是通過公用的控制器中的一個方法:
public function getAuthUser($guard = 'admin'){
return Auth::guard($guard)->user();
}
感謝觀看!