如何在最大登录尝试后锁定用户时更新表格?

时间:2015-07-22 05:31:09

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 devise

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

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

我尝试使用以下代码

在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

那没有成功!

2 个答案:

答案 0 :(得分:1)

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

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

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

另外,请在此处编写测试,以便稍后在您重新访问该部分代码时,它将为您提供有关条件的一些背景信息。

答案 1 :(得分:1)

经过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

关闭。