Rails 6 - 密码显示在日志中,即使我将其添加到"filter_parameters"



我有一个简单的方法来记录用户的活动,看起来有点像:

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

相关内容

  • 没有找到相关文章

最新更新