我有一个简单的方法来记录用户的活动,看起来有点像:
def log_activity
...
log_activity.params = params.inspect
log_activity.save
...
end
当我查看终端控制台(然后查看DB(时,我可以看到那里打印出的密码:
LogActivity Create(2.0ms(INSERT INTO。。。("user_id",…,"params"(值($1,$2,$3,$4,$5,$6,$7,$8,$9(返回";id";[["user_id",13],["params","#<ActionController::参数{"authenticity_token"="gIHGES_Y74nFAtJ1xoH5YD3e28uPJ-icdDAqkGufjjhgfjhf";,"用户"=>{电子邮件"=>"my@email.com&";,"密码"=>quot;我的秘密密码"remember_me"=>quot;0〃},"提交"=>quot;登录"控制器"=>quot;设计/会话";,"动作"=>quot;创建"}允许:false>quot;],["消息","成功"登录。"],["created_at","2021-04-24 08:50:16262145"],["updated_at","2021-04-24 08:50:16262145"]]
如何从这里隐藏它并阻止它保存到DB?不过,我可能可以检查params
并手动将其从哈希中删除——有更优雅的方法吗?
我已经读到,我可以通过将密码添加到config/filter_parameter_logging.rb
:来禁用日志记录
Rails.application.config.filter_parameters += [
:passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn, :password
]
或将其添加到模型(LogActivity.rb
(:
class LogActivity < ApplicationRecord
self.filter_attributes=[:password]
end
或将其添加到application.rb
文件:
config.filter_parameters += ["password"]
然而,即使在重新启动服务器后,这些操作对我来说都不起作用,密码总是显示在终端窗口中,然后存储在数据库中。
我该如何过滤掉它?
使用request.filtered_parameters
获取基于Rails.application.config.filter_parameters
配置的过滤参数:
def log_activity
...
log_activity.params = request.filtered_parameters.inspect
log_activity.save
...
end