如何在Rails 6中禁用ActiveRecord对非敏感含token字段的参数过滤
Rails 6 关闭token字段自动过滤配置方法
Rails 6 默认开启的ActiveRecord属性敏感过滤机制,会自动将字段名包含token、secret、password的内容在日志、控制台输出时替换为[FILTERED],按以下配置可调整过滤规则:
方案1:全局移除token字段过滤规则
在项目的 config/initializers/filter_parameter_logging.rb 文件中添加如下代码:
# 移除全局默认的token字段匹配规则 ActiveRecord::Base.filter_attributes = ActiveRecord::Base.filter_attributes.reject do |rule| rule.is_a?(Regexp) && rule.match?(/token/i) end
如果需要自定义全局过滤列表,也可以直接赋值:
# 仅过滤指定的敏感字段,排除token相关 ActiveRecord::Base.filter_attributes = [:password, :password_digest, :credit_card]
方案2:仅针对指定模型开放token字段(安全性更高)
如果仅部分模型的token字段非敏感,可直接在对应模型文件中单独调整过滤规则:
class YourTargetModel < ApplicationRecord # 仅移除当前模型的token过滤规则,保留全局其他过滤规则 self.filter_attributes = self.filter_attributes.reject do |rule| rule.is_a?(Regexp) && rule.match?(/token/i) end end
配置完成后重启Rails服务、Rails控制台即可生效,对应token字段会正常在日志和控制台中打印明文内容。
注:如果需要请求日志中的token参数也正常显示,可同步移除Rails.application.config.filter_parameters数组中的:token项,修改位置同样为上述初始化文件。
内容的提问来源于stack exchange,提问作者hummmingbear
相关产品推荐
相关产品推荐

