RSwag 不支持请求中的 apiKey 对

问题描述 投票:0回答:2

github问题可以看出,RSwag不支持api Key认证的多个标头。

这是我的 openapi/swagger yml,遵循 swagger 文档中的多个 API 密钥设置

components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Your API Key, provided by GoApron.
    userId:
      type: apiKey
      in: header
      name: X-USER-ID
      description: Your GoApron user ID
security:
- apiKey: []
  userId: []

正如问题所指出的:

在测试中,我们发现 rswag 的规范帮助程序仅将 apiKey 类型的第一个条目添加到标头/查询中。

有什么方法可以在我的 API 请求中实际指定这两个标头吗?

仅向每个端点添加标头

parameters
的问题在于,它会将所有这些参数添加到文档中,而这不是应该显示身份验证标头的方式。

我想要的是一种“破解” rswag 请求规范中的请求的方法,以将这些标头作为请求的一部分发送,即使由于 rswag 限制它们没有定义为参数。

我目前的想法

似乎覆盖

build_request
(由
submit_request
使用)可能是我最好的选择:

https://github.com/rswag/rswag/blob/master/rswag-specs/lib/rswag/specs/example_helpers.rb#L10 https://github.com/rswag/rswag/blob/master/rswag-specs/lib/rswag/specs/request_factory.rb#L14

ruby-on-rails rspec swagger rswag
2个回答
0
投票

覆盖

build_request
似乎有效,当我去覆盖它时我可以传入自定义标头:

module Rswag
  module Specs
    class RequestFactory
      alias_method :original_build_request, :build_request

      def build_request(metadata, example)
        request = original_build_request(metadata, example)

        request[:headers] ||= {}

        # Check for custom headers specified in metadata using run_test! keyword arguments
        if metadata[:custom_headers]
          request[:headers].merge!(metadata[:custom_headers])
        else
          request[:headers].merge!(DEFAULT_HEADERS)
        end

        request
      end
    end
  end
end

0
投票

事实证明,一切都取决于正确使用 Rswag 中的符号。 具体来说,当您在

swagger_helper
中定义参数时,请确保使用符号而不是字符串作为 securitySchemes 值。 我在某些字段上使用字符串而不是符号,即使它生成了正确的 swagger.yml,Rswag 也无法理解这些引用。 只需确保遵循格式此处

现在一切都可以通过标题和

let
变量神奇地发挥作用。我认为 Github 问题并不是我想象的那样。 事实证明,当您在 securitySchemes 字段上使用符号而不是字符串时,只是 Rswag 规范无法正确处理 Ref。

© www.soinside.com 2019 - 2024. All rights reserved.