我如何使用我的应用程序的参数过滤器手动过滤哈希?
我想它会是这样的:
Rails.application.filter :password => 'pass1234'
# => {:password => '[FILTERED]'}
Run Code Online (Sandbox Code Playgroud)
编辑(澄清):我知道Rails params在写入日志时会过滤哈希值.我想要做的是将相同的过滤器应用于我的特权的不同散列,然后再将其写入日志Rails.logger.info.我正在调用远程HTTP查询作为我的应用程序的一部分(因为大多数后端通过远程API操作),并且我正在记录传递的URL和参数.我想拥有日志,但也确保没有敏感的参数出现在那里.
Ste*_*ven 52
经过几分钟的游戏后,我发现这是做到这一点的方法:
filters = Rails.application.config.filter_parameters
f = ActionDispatch::Http::ParameterFilter.new filters
f.filter :password => 'haha' # => {:password=>"[FILTERED]"}
Run Code Online (Sandbox Code Playgroud)
Sor*_*row 22
看到config/application.rb文件,到最后有一行:
config.filter_parameters += [:password]
Run Code Online (Sandbox Code Playgroud)
这样,"密码"参数不会显示在日志中,但您仍然可以正常访问该值.
编辑
似乎最初误解了"过滤器"的含义.至于澄清的问题,我不知道如何处理真正的Rails方式.
这是一种蛮力方法:
CGI::parse(URI.parse(my_url_address_with_params).query)以获取param/values的哈希值(注意:值实际存储为数组; 这里是讨论).*filtered*.Rails.logger.info(或debug)记录.以下是依赖Rails魔法类和方法时应该深入研究的内容:
在Rails 3中,执行该技巧的代码似乎存在ActionDispatch::Http(ParameterFilter特别是方法`filtered_parameters').该文档可在API码头(或,说实话,非常小的文档).您可以检查源以了解其工作原理.
我对Rails内部的了解不足以提出任何其他建议.我相信有更好理解它的人可能会有更多的帮助.