RSwag 不支持请求中的 apiKey 对的解决方法

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

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
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.