Laravel 8中使用Tymon JWT Auth登录失败:TypeError错误求助
解决JWT Auth登录时的
TypeError问题 嘿,这个问题我之前也碰到过!一眼就瞅出来问题在哪了——你的User模型虽然引入了JWTSubject接口,但没在类声明里明确标注要实现这个接口!
为啥会报错?
PHP里要实现一个接口,必须在类定义里显式写implements 接口名,光引入命名空间没用。报错提示说App\Models\User不是JWTSubject的实例,就是因为这个原因。
怎么修复?
直接修改User模型的类声明,加上implements JWTSubject就行:
class User extends Authenticatable implements JWTSubject { // 你原来的模型代码都不用动 }
要是改完还不行?试试这几步
- 清一下Laravel的类缓存:跑个
php artisan optimize:clear,有时候旧的类定义被缓存了,改了代码也不生效 - 检查下
Tymon\JWTAuth\Contracts\JWTSubject的命名空间有没有拼错,别打错字 - 确认你的
getJWTIdentifier()和getJWTCustomClaims()方法和接口要求的签名一致(你的代码里这俩方法是对的,不用改)
验证一下
改完之后重新调用登录接口,应该就能正常生成Token了。你的登录逻辑代码本身没啥问题,只要模型正确实现接口,auth()->attempt()就能正常工作啦。
内容的提问来源于stack exchange,提问作者Aghnat Atqiya
相关产品推荐
相关产品推荐

