当用户在最大登录尝试次数后被锁定时,如何更新 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 time
或 updated_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
关闭。
在我的 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 time
或 updated_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
关闭。