You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:42:02