【问题标题】:With rails audits gem, can we add an audit manually?使用 rails audits gem,我们可以手动添加审核吗?
【发布时间】:2021-04-19 01:22:18
【问题描述】:

我注意到设计使用(在引擎盖下)本质上是对用户的 update_all,以增加 failed_attempts。这意味着用户对象上没有 after_commit 钩子,因此审核的 gem 不会记录 devise 所做的更改。

从技术上讲,记录确实发生了变化,记录失败的登录尝试日志会非常有用。

有没有“好”的方法来添加审计记录?即使我可以通过对错误尝试的评论来做到这一点

寻找最佳实践。

【问题讨论】:

    标签: ruby-on-rails devise audit


    【解决方案1】:

    一般而言,有几种方法可以在 audited 甚至没有注意到的情况下更改数据 - update_allconnection.execute,来自复杂应用程序中的非 Rails 进程,通过存储过程/触发器在数据库本身内。因此,在 rails/gem 级别没有通用的解决方案(除了基于触发器的数据库本身)。

    对于您的特定任务 - 您可以使用warden 的before_failure 回调(设计在warden 之上运行,请参阅warden wiki 以获取回调文档),例如:

    Warden::Manager.before_failure do |env, opts|
      request = Rack::Request.new(env)
      user = User.find_by(email: request.params[:email]) # not sure about param name
      if user
        user.audits.create(action: "update", audit_comment: "failed login from ...")
      end
    end
    

    但请注意,这可能会使您的应用容易受到定时攻击 - 因为 db write 应用会以正确的电子邮件和错误的密码来响应尝试,因此攻击者可以检测到有效的电子邮件

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 2012-06-15
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2019-12-02
      • 2017-09-07
      相关资源
      最近更新 更多