我想过滤某些用户信息,以便日志中不会捕获敏感信息。但是,在一种情况下,我想记录格式而不是默认格式 "[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/