問題描述
最近在做一個專案,需要多表認證,分別為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();
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結