You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动