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基础配置
- 检查
.env文件是否存在JWT_SECRET字段,若没有则执行命令生成密钥:php artisan jwt:secret - 确认
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
相关产品推荐
相关产品推荐

