如何在Laravel的Swagger中移除Bearer前缀?
Laravel移除Swagger中JWT的Bearer前缀要求方案
你在Controller里加的Swagger注解只是定义了安全方案,但实际请求时Laravel的JWT认证逻辑还是强制要求Bearer前缀,得从Swagger配置和Laravel认证逻辑两方面修改:
1. 调整Swagger安全方案注解
把原来的http类型改成apiKey类型,这样Swagger的授权输入框不会自动给你加Bearer前缀,直接把输入的token放到请求头里:
@OA\SecurityScheme( type="apiKey", in="header", name="Authorization", securityScheme="bearerAuth" )
2. 修改Laravel的JWT认证逻辑
默认情况下tymon/jwt-auth这类JWT包会校验Authorization头的Bearer前缀,两种修改方式选一种就行:
方式一:修改认证中间件
找到app/Http/Middleware/Authenticate.php(或者你自定义的JWT认证中间件),调整token获取逻辑,自动兼容有无前缀的情况:
public function handle($request, Closure $next, ...$guards) { $token = $request->header('Authorization'); // 有前缀就去掉,没有直接用 if (str_starts_with($token, 'Bearer ')) { $token = substr($token, 7); } try { $user = JWTAuth::parseToken($token)->authenticate(); } catch (\Exception $e) { return response()->json(['error' => '未授权'], 401); } return $next($request); }
方式二:修改JWT配置文件
打开config/jwt.php,找到token_prefix选项,把值改成空字符串:
'token_prefix' => '',
这样JWT包会直接读取token内容,不再校验前缀。
3. 刷新Swagger文档
修改完注解后,执行生成命令更新文档:
php artisan l5-swagger:generate
之后在Swagger里直接输入纯token就能正常授权了。
内容的提问来源于stack exchange,提问作者gaurav bhatia
相关产品推荐
相关产品推荐

