Parameter Filter & Filter Parameters
过滤参数。如:
env["action_dispatch.parameter_filter"] = [:password]
# => replaces the value to all keys matching /password/i with "[FILTERED]"
这就是为什么我们在日志里看不到 password 的值,而是显示 FILTERED 的原因。
实例方法:
filter
# 具体包含下面 3 项内容:
filtered_parameters
filtered_env
filtered_path
在 new 页面,对 http://blog.test.example.com:3000/users 发起 POST 请求。
检测结果:
filtered_env
# => 一大串 env 相关数据
request.filtered_parameters
# => {"utf8"=>"✓",
"authenticity_token"=>"+.../hHj0C5Ao7CxXYwlejyghpNM3elUVw==",
"user"=>{"name"=>"kelby", "email"=>""},
"commit"=>"Create User",
"controller"=>"users",
"action"=>"create"}
request.filtered_path
# => "/users"
使用举例:
# 用 "[FILTERED]" 替换 /password/i
env["action_dispatch.parameter_filter"] = [:password]
# 用 "[FILTERED]" 替换 /foo|bar/i
env["action_dispatch.parameter_filter"] = [:foo, "bar"]
以上直接使用 env 比较少见,更多的用法是:
# filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]
查看应用程序过滤了什么字段:
Rails.application.config.filter_parameters
除上述方法外,还有:
env_filter
filtered_query_string
parameter_filter_for
parameter_filter
Note: 用得比较多的是方法 parameter_filter,通常用来配置过滤 :password ... 过滤的其实是 ParameterFilter 的实例对象,虽然这里没有体现出来。
最后更新于
这有帮助吗?