ruby-on-rails – 我可以自定义Rails过滤参数的方式吗?
发布时间:2020-12-17 02:55:00 所属栏目:百科 来源:网络整理
导读:我想过滤某些用户信息,以便不在日志中捕获敏感信息.但是,在一种情况下,我想记录格式而不是默认的“[FILTERED]”. 例如,我想进行这种转换: # user input value to log"e6132 DG71" = "a9999 AA99" 这有助于我们解决用户问题. 我可以为Rails的filter_paramete
我想过滤某些用户信息,以便不在日志中捕获敏感信息.但是,在一种情况下,我想记录格式而不是默认的“[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 /.你也可以为自定义过滤器做同样的事情: if [/foo/,/bar/].detect {|r| r.match(param_name) } # ... end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |