2015-07-22 15 views
0

在我的Rails應用程序中,我使用Devise lockable在設置最大失敗登錄閾值後鎖定了用戶,但是如何更新表以便我可以向用戶添加一個條目以表示此用戶也被時間戳鎖定!如何在最大登錄嘗試後鎖定用戶時更新表?

我只是不知道該把代碼放在哪裏!

我試圖創建一個名爲「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

你有沒有得到任何錯誤? – Pavan

+0

問題已經: http://stackoverflow.com/questions/13184514/how-to-lock-users-using-devise –

+0

@Pavan:不,我沒有,該方法沒有執行。 –

回答

0

1小時的研究和測試我自己找到解決方案後,我在設計的寶石overrided lockable.rb並添加代碼。在LIB

創建文件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 

關閉。

1

我在這裏看到的一個可能的解決方案是,您可以在after_save的回調中有一個條件,其中您檢查用戶是否被鎖定。

如果用戶被鎖定,請使用current timeupdated_at更新時間戳。

該解決方案可能有問題,因爲每次在用戶對象上調用保存時都會執行回調,從而更新時間戳。請注意添加足夠的條件以防止這種情況發生。

另外,請寫出解決此測試,以便在稍後的某個時間點,當你再次訪問的代碼部分,它將爲您提供有關條件的一些背景。

相關問題