使用 VCR 过滤敏感数据

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

我正在使用 VCR gem 记录 http 交互并在将来重播它们。我想过滤掉 uri 请求中的实际密码值。以下是 uri 的示例:

http://services.somesite.com/Services.asmx/Cabins
Username=long&Password=john&StartDate=03%2F22%2F2012&EndDate=03%2F29%2F2012

虽然这里提供了解释,但我自己尝试了几次后仍然不确定如何做到:

https://www.relishapp.com/myronmarston/vcr/v/2-0-0/docs/configuration/filter-sensitive-data

如有任何帮助,我们将不胜感激。

ruby ruby-on-rails-3 testing rspec vcr
3个回答
29
投票
VCR.configure do |c|
  c.filter_sensitive_data("<SOMESITE_PASSWORD>") do
    ENV['SOMESITE_PASSWORD']
    # or $credentials['somesite']['password'] or whatever
  end
end

本质上,您给 VCR 一些占位符文本,然后该块需要返回真实密码,从任何规范密码“存储库”中读取它。

注意,只有第一次请求记录时才需要真实密码;在后续运行中,它可能是假密码(只要它与发出请求的代码使用的假密码相同)。


11
投票

对于 Rails 4+,如果您使用的是 Secrets.yml,您可能想要这样做

VCR.configure do |config|
  Rails.application.secrets.each do |k,v|
    config.filter_sensitive_data("ENV[#{k}]") { v }
  end
end

现在您一定不会忘记任何事情


0
投票

根据 @montrealmike 的答案更新了 Rails 6+ 的答案,包含加密的秘密:

VCR.configure do |config|
  Rails.application.credentials.config.each do |k, v|
    config.filter_sensitive_data("ENV[#{k}]") { v }
  end
end

唯一的变化是将

Rails.application.secrets
替换为
Rails.application.credentials.config

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