ruby-on-rails - 我可以自定义 Rails 过滤参数的方式吗?

标签 ruby-on-rails parameters

我想过滤某些用户信息,以便日志中不会捕获敏感信息。但是,在一种情况下,我想记录格式而不是默认格式 "[FILTERED]" .

例如,我想进行这种转换:

# user input    value to log
"e6132 DG71" => "a9999 AA99"

这将帮助我们解决用户的问题。

我可以为 Rails 的 filter_parameters 使用自定义过滤器(可能是 proc?)方法?

最佳答案

附加一个 lambda 过滤器

您可以将 lambda 过滤器附加到 Rails.application.config.filter_parameters .只有没有被典型过滤捕获的参数才会进入自定义过滤。

# Typical filters - will show as [FILTERED]
Rails.application.config.filter_parameters += [
  :password
]

# Custom filter - this only sees what the previous list didn't catch
Rails.application.config.filter_parameters << lambda do |param_name, value|
  if %w[foo_param bar_param].include?(param_name) && value.respond_to?(:gsub!)
    # Alter the string in place because we don't have access to 
    # the hash to update the key's value
    value.gsub!(/[a-z]/, "a")
    value.gsub!(/[A-Z]/, "A")
    value.gsub!(/[0-9]/, "9")
    # Stick this at the beginning to make it easy to see in logs
    value.gsub!(/\A/, "[FORMAT FILTERED]")
  end
end

请注意,默认过滤器与正则表达式匹配; :password被视为 /password/ .您可以对自定义过滤器执行同样的操作:
if [/foo/, /bar/].detect {|r| r.match(param_name) }
  # ...
end

关于ruby-on-rails - 我可以自定义 Rails 过滤参数的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28414886/

相关文章:

python - 如何强制 Python 在循环内创建新变量/新范围?

sql - 是否有任何信息可以获取存储过程输入参数的默认值?

android - 将信息传递给 Android 服务

ruby-on-rails - 使用 Heroku 上的 CarrierWave 将上传的文件提取到 S3

ruby-on-rails - Rails 服务器只显示帮助消息

ruby-on-rails - ActiveRecord::Base.logger 与 Rails logger 不同吗?

PHP 将函数名称作为参数传递然后调用该函数?

ruby-on-rails - 环境从 Windows 更改为 Linux 后 Gem 安装编码错误

ruby-on-rails - Active Admin - 用户和管理员的相同模型

parameters - 如何在 Aurelia 中动态绑定(bind) route-href 参数?