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

升级tymon/jwt-auth至0.5.*后,如何通过请求Token获取用户?

解决tymon/jwt-auth 0.5.*版本中Token验证API失效的问题

你遇到的问题核心是新版本的API变更+中间件未正确启用导致的,咱们一步步来修复:

1. 先启用auth:api中间件

你现在注释掉了控制器的中间件,这是auth()->user()返回空的根本原因——框架没有自动处理Token的验证和用户绑定。把注释去掉,根据你的需求设置不需要验证的方法:

class UserController extends Controller { 
    public function __construct() { 
        // 如果这个控制器里有不需要验证的方法(比如login),就添加到except数组里
        $this->middleware('auth:api', ['except' => []]); 
    } 

    // ... 其他方法
}

启用中间件后,只要请求携带了有效的Token(默认支持请求头Authorization: Bearer {token}、请求参数token、Cookie这几种传递方式),中间件会自动验证Token,并将用户实例绑定到auth()助手函数中,这时候auth()->user()就能正常获取用户了。

2. 替换已弃用的JWTAuth::toUser()方法

在0.5.*版本中,JWTAuth::toUser()已经被移除了。如果因为特殊场景需要手动处理Token(不推荐,中间件是更规范的实现方式),可以用parseToken()->authenticate()替代:

public function enterWorld(Request $request) { 
    try {
        // 解析请求中的Token并验证合法性
        $user = JWTAuth::parseToken()->authenticate();
    } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
        // 处理Token无效/不存在的异常
        return response()->json(['error' => 'Invalid or missing token'], 401);
    }
    return response()->json($user); 
}

3. 确认用户模型的必要实现

升级后要确保你的用户模型实现了JWTSubject接口,这是新版本的强制要求:

use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    // ... 你的模型原有代码

    // 实现JWTSubject接口的两个必填方法
    public function getJWTIdentifier()
    {
        return $this->getKey(); // 返回用户主键ID
    }

    public function getJWTCustomClaims()
    {
        return []; // 可在这里添加自定义JWT声明,比如用户角色、权限等
    }
}

最后验证

现在测试enterWorld接口:

  • 携带登录时获取的token(推荐放在Authorization: Bearer {token}请求头里,更符合REST规范)
  • 请求后应该能正常返回用户信息,而不是空数组了

内容的提问来源于stack exchange,提问作者TheUnreal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:12:35