Laravel 9集成L5-Swagger时Swagger未自动携带x-session-id请求头问题
解决L5-Swagger中x-session-id请求头未自动携带的问题
我之前在使用Laravel 9搭配L5-Swagger时也遇到过一模一样的问题,折腾了好一会儿才找到原因,给你几个排查和解决的步骤:
1. 修正Swagger配置文件的结构
你的配置结构可能和OpenAPI 3.x的规范不匹配,L5-Swagger现在默认支持OpenAPI 3,安全方案的定义位置需要调整。打开config/l5-swagger.php,把原来的securityDefinitions替换成下面的结构:
'components' => [ 'securitySchemes' => [ 'api_key_security' => [ 'type' => 'apiKey', 'description' => 'A short description for security scheme', 'name' => 'x-session-id', 'in' => 'header', ], ], ], 'security' => [ ['api_key_security' => []], ],
原来的securityDefinitions是Swagger 2.0的写法,而OpenAPI 3.x要求把安全方案放在components/securitySchemes下,全局的安全规则单独放在根级别的security里。
2. 清理缓存并重新生成Swagger文档
Laravel的配置缓存可能会导致新的配置不生效,执行下面的命令:
php artisan config:clear php artisan l5-swagger:generate
这会清除旧的配置缓存,并重新生成符合新配置的swagger.json文件。
3. 在Swagger UI中完成授权操作
这是最容易被忽略的一步:即使你配置了全局的安全规则,Swagger UI并不会自动帮你填充请求头的值。你需要手动点击界面右上角的Authorize按钮,在弹出的窗口中找到api_key_security,输入你的x-session-id值,然后点击Authorize完成授权。之后再发送请求,这个头就会自动被携带上了。
4. 验证控制器注释的正确性
你的控制器方法注释里的security配置是正确的,但要确保api_key_security的名称和配置文件里的完全一致,大小写也要匹配,这点你已经做到了,可以不用改。
按照这几步操作后,应该就能解决请求头不自动携带的问题了。
内容的提问来源于stack exchange,提问作者Juan Pablo B




