Laravel 9 中 Tymon\JWTAuth BaseMiddleware 类找不到问题求助
解决Laravel 9中tymon/jwt-auth 2.x自定义中间件的类不存在与废弃问题
问题根源
tymon/jwt-auth 2.x版本后期对命名空间结构做了调整,原Http\Middleware下的类已被标记为废弃,同时BaseMiddleware的命名空间有明确的位置规范,你遇到的问题主要是依赖版本或自动加载异常导致的类找不到,以及对废弃类的误用。
分步解决方案
确保依赖为最新2.x版本
执行以下命令更新依赖,避免使用过时的2.x分支版本:composer update tymon/jwt-auth更新Composer自动加载
若类找不到的提示依然存在,执行自动加载更新命令,修复命名空间映射问题:composer dump-autoload正确引入BaseMiddleware
在自定义中间件中,使用正确的命名空间引入BaseMiddleware:use Tymon\JWTAuth\Middleware\BaseMiddleware;自定义Customer中间件的正确写法
继承BaseMiddleware并实现业务逻辑,示例代码如下:<?php namespace App\Http\Middleware; use Closure; use Tymon\JWTAuth\Middleware\BaseMiddleware; use Tymon\JWTAuth\Exceptions\TokenExpiredException; use Tymon\JWTAuth\Exceptions\TokenInvalidException; use Tymon\JWTAuth\Exceptions\JWTException; class CustomerMiddleware extends BaseMiddleware { public function handle($request, Closure $next) { try { // 解析Token并验证用户身份 $user = $this->auth->parseToken()->authenticate(); } catch (TokenExpiredException $e) { return response()->json(['message' => '登录凭证已过期'], 401); } catch (TokenInvalidException $e) { return response()->json(['message' => '无效的登录凭证'], 401); } catch (JWTException $e) { return response()->json(['message' => '请提供登录凭证'], 400); } // 将用户实例绑定到请求中 $request->setUserResolver(fn () => $user); return $next($request); } }替换废弃的中间件类
原Http\Middleware下的所有类均已废弃,如需使用官方中间件(如认证中间件),改用Tymon\JWTAuth\Middleware命名空间下的类,例如:use Tymon\JWTAuth\Middleware\Authenticate;
额外检查
若之前未发布过jwt配置文件,执行以下命令生成config/jwt.php,确保配置完整:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
内容的提问来源于stack exchange,提问作者Muhammad Naveed
相关产品推荐
相关产品推荐

