如何在rails中过滤参数?
Rails内置了日志过滤function,因此您不需要login密码和信用卡。 非常适用,但是当你想触发自定义日志(比如发邮件)并发送你自己的params或其他数据的时候,参数显然不是自动过滤的。 我一直在挖掘,试图find这个在轨道来源,但迄今没有运气。
我已经configuration轨道来过滤参数如下,它适用于保持轨道日志数据:
config.filter_parameters += [:password, :password_confirmation, :credit_card]
在将数据转储到电子邮件,API调用或自定义(非导轨)日志之前,如何过滤params散列中的敏感数据?
您始终可以使用except
方法:
params.except(:password, :password_confirmation, :credit_card)
这将排除他们的名单。 要“过滤”他们,你可以尝试这种方法 。
Rails 4+
用于在Rails 4+中过滤日志的config.filter_parameters
: config.filter_parameters
已经从application.rb移动到它自己的初始化程序。
configuration/初始化/ filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]
tadman回答正确,但这里有一些额外的信息:
在application.rb中
config.filter_parameters += [:password, :password_confirmation, :credit_card]
无论你在做什么自定义日志logging:
f = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters) f.filter :order => {:credit_card => "4111111111111111"} => {:order=>{:credit_card=>"[FILTERED]"}}
如果你在轨道控制器的方法,为什么不只是调用request.filtered_parameters
?
使用已经提供的东西总是一个不错的select。 干杯!
只需添加@tadman答案:
使用except
,请注意,它只会删除参数的顶级密钥,例如:
params = { search_query: 'foobar', secret_key1: 'SENSITIVE_KEY_1', auth_info: {secret_key_2: 'SENSITIVE_KEY2'} } params.except(:secret_key1, :secret_key2) => {:search_query=>"foobar", :auth_info=>{:secret_key_2=>"SENSITIVE_KEY2"}}
使用request.filtered_parameters
将过滤这两个键,如果他们在config / application.rb
config.filter_parameters += [:password]