当用户在最大登录尝试次数后被锁定时,如何更新 table?

How can I update table when a user is locked after maximum login attempts?

在我的 rails 应用程序中,我使用 Devise lockable 在最大失败登录阈值后成功锁定了用户,但是我如何更新 table 以便我可以向用户添加一个条目来表示该用户也被时间戳锁定!

我只是不知道该把代码放在哪里!

我尝试使用以下代码在 Initializer 中创建一个名为 "lockable.rb" 的文件,

    def lock_access!(opts = { })
      @user.is_lock = "Yes"
      @user.reason_of_deactivation = "Failed login attempt"
      @user.deactivated_date = DateTime.now
      @user.save
    end

没成功!

我在这里看到的一个可能的解决方案是,您可以在 after_save 的回调中设置一个条件,您可以在其中检查用户是否被锁定。

如果用户被锁定,使用 current timeupdated_at 更新时间戳。

此解决方案可能存在问题,因为每次对用户对象调用保存时都会执行回调,从而更新时间戳。请注意添加足够的条件以防止这种情况发生。

此外,请围绕此编写测试,以便在稍后的某个时间点,当您重新访问该部分代码时,它会为您提供一些有关条件的上下文。

经过 1 小时的研究和测试,我自己找到了解决方案,我在 Devise gem 中覆盖了 lockable.rb 并添加了代码。

在 lib/devise/models/lockable.rb

中创建了文件 lockable.rb
    def lock_access!(opts = { })
      super
      self.is_lock = "Yes"
      self.reason_of_deactivation = "Exceeded max login threshold"
      self.deactivated_date = DateTime.now
    end

关闭。