在我的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
那没有成功!
答案 0 :(得分:1)
我在这里看到的一个可能的解决方案是,你可以在after_save
的回调中找到一个条件,在那里检查用户是否被锁定。
如果用户已被锁定,请使用current time
或updated_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
关闭。