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

Laravel中JWT中间件提示‘Jwt token is not found’问题求助

Laravel JWT中间件提示“Jwt token is not found”的解决方法

问题场景

在Laravel中自定义了JWT中间件,已注册别名并在控制器构造方法中调用,API路由挂载了api中间件组,但调用接口时返回“Jwt token is not found”错误。

解决步骤

  • 确认请求正确携带Token
    JWT Token的标准携带方式是通过Authorization请求头,格式为:

    Authorization: Bearer {你的JWT Token}
    

    前端请求时需确保正确设置该头;若使用其他方式(如请求参数token、Cookie),需修改中间件的Token解析逻辑,比如使用JWTAuth::setToken($request->input('token'))来指定Token来源。

  • 优化中间件的异常处理逻辑
    原中间件直接调用parseToken()会在Token缺失时抛出未捕获的异常,建议添加异常捕获,同时细化错误提示:

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Tymon\JWTAuth\Facades\JWTAuth;
    use Tymon\JWTAuth\Exceptions\JWTException;
    use Tymon\JWTAuth\Exceptions\TokenExpiredException;
    use Tymon\JWTAuth\Exceptions\TokenInvalidException;
    
    class JWT
    {
        public function handle(Request $request, Closure $next): Response
        {
            try {
                // 解析Token并验证用户身份
                JWTAuth::parseToken()->authenticate();
            } catch (TokenExpiredException $e) {
                return response()->json(['error' => 'Token已过期'], 401);
            } catch (TokenInvalidException $e) {
                return response()->json(['error' => '无效的Token'], 401);
            } catch (JWTException $e) {
                return response()->json(['error' => '未找到Token'], 401);
            }
    
            return $next($request);
        }
    }
    
  • 验证JWT基础配置

    1. 检查.env文件是否存在JWT_SECRET字段,若没有则执行命令生成密钥:
      php artisan jwt:secret
      
    2. 确认config/jwt.php中的配置项,比如token_type是否为Bearer,与请求头的格式匹配。
  • 检查中间件执行顺序与挂载方式
    可以尝试将JWT中间件直接添加到路由组中,避免控制器构造方法可能带来的优先级问题:

    Route::group(['middleware' => ['api', 'JWT']], function () {
        Route::apiResource('/employee', EmployeeController::class); 
        Route::apiResource('/supplier', SupplierController::class);
    });
    
  • 调试Token获取流程
    在中间件中添加调试代码,确认是否能正确获取到Token:

    // 在handle方法开头添加
    dd(JWTAuth::getToken());
    

    若输出为null,说明请求未携带Token或Token来源不符合JWT包的默认解析规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:45:02