Laravel 5.6中如何将Tymon JWT认证从User模型改为Member模型?
解决Laravel JWT认证默认调用User模型而非Member模型的问题
看起来你已经在config/auth.php里做了基础配置,但系统还是默认用User模型,大概率是这几个地方没处理到位,我给你一步步梳理解决:
1. 补全JWT配置文件里的模型指定
你的config/jwt.php配置最后截断了,JWT扩展需要明确知道要使用哪个模型来做认证。找到user配置项,把它设置为你的Member模型命名空间:
'user' => \App\Models\Member::class,
这一步是让JWT本身知道要关联Member模型,而不是默认的User。
2. 确保认证时指定使用api Guard
Laravel默认会用web Guard(对应users模型),所以你在代码里做认证操作时,必须明确指定用api Guard:
// 登录验证示例 $credentials = $request->only('email', 'password'); if (!$token = auth('api')->attempt($credentials)) { return response()->json(['error' => '登录失败'], 401); } // 获取当前认证的Member示例 $currentMember = auth('api')->user();
如果直接用auth()->user(),系统会自动用默认的web Guard,自然还是调用User模型。
3. 让Member模型实现JWTSubject接口
JWT扩展要求认证模型必须实现Tymon\JWTAuth\Contracts\JWTSubject接口,并且实现两个方法,修改你的Member模型:
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Tymon\JWTAuth\Contracts\JWTSubject; class Member extends Model implements JWTSubject { // 你的模型原有代码... // 实现JWTSubject接口的方法 public function getJWTIdentifier() { return $this->getKey(); // 返回模型的主键ID } public function getJWTCustomClaims() { return []; // 可以在这里添加自定义的JWT声明,不需要的话返回空数组 } }
这一步是让模型和JWT扩展建立关联,没有这个的话,JWT无法正确处理Member模型的认证。
4. 清除配置缓存
修改配置后,Laravel可能还在使用旧的缓存配置,执行以下命令清除缓存:
php artisan config:clear
做完这几步,你的JWT认证应该就会正确使用Member模型了。
内容的提问来源于stack exchange,提问作者Ever Adm
相关产品推荐
相关产品推荐

