在Rails中手动过滤参数

问题描述

| 如何使用应用程序的参数过滤器手动过滤哈希? 我想它会像这样:
Rails.application.filter :password => \'pass1234\'
  # => {:password => \'[FILTERED]\'}
编辑(澄清):我知道Rails在写入日志时会过滤“ 1”哈希值。我想做的就是将相同的过滤器以我的特权应用于不同的哈希,然后再使用
Rails.logger.info
之类的东西将其写入日志。我正在将远程HTTP查询作为应用程序的一部分进行调用(因为大多数后端都通过远程API进行操作),并且正在记录所传递的URL和参数。我想拥有日志,但也要确保没有任何敏感参数出现在此处。     

解决方法

        经过几分钟的粗略研究,我发现这是解决问题的方法:
filters = Rails.application.config.filter_parameters
f = ActionDispatch::Http::ParameterFilter.new filters
f.filter :password => \'haha\' # => {:password=>\"[FILTERED]\"}
    ,        参见
config/application.rb
文件,最后有一行:
config.filter_parameters += [:password]
这样,\“ password \”参数将不会显示在日志中,但是您仍然可以正常访问该值。 编辑 似乎原来是误解了您对“过滤器”的含义。至于已解决的问题,我不知道如何以真正的Rails方式处理它。 这是一种蛮力方法: 用ѭ6the解析查询以获取参数/值的哈希(注意:值实际上存储为数组;在此为讨论)。 找到要过滤的参数,并用文字“ 7”替换值。 直接呼叫
Rails.logger.info
(或
debug
)进行登录。 依赖Rails神奇的类和方法时,应深入了解以下内容: 在Rails 3中,完成窍门的代码似乎位于
ActionDispatch::Http
(特别是ѭ11,,方法`filtered_pa​​rameters \')中。该文档可从API Dock获得(或者说实话,很少的文档)。您可以检查源,以了解其工作原理。 我对Rails内部的了解不足以提出其他建议。我相信对它有更好了解的人可能会有所帮助。     ,        在上述Steven Xu的答案的基础上,我在Rails应用程序中创建了此初始化程序:
class ActionController::Parameters
  def filtered
    ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters).filter(self)
  end
end
让我称其为params.filtered
[1] pry(#<LessonsController>)> params.filtered
{
  \"controller\" => \"lessons\",\"action\"     => \"search\",\"locale\"     => \"en\"
}
[2] pry(#<LessonsController>)> params[:password] = \"bob\"
\"bob\"
[3] pry(#<LessonsController>)> params.filtered
{
  \"controller\" => \"lessons\",\"locale\"     => \"en\",\"password\"   => \"[FILTERED]\"
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...