加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读