2011-07-07 77 views
0

我知道有很多gem可用於在Ruby on Rails中實現完整身份驗證。Rails完全從頭認證

但在我的情況下,我需要從頭開始實施一個。 有很多的教程,說明如何在Rails中實現身份驗證,但他們都不涵蓋了很多其他重要部件,如:

1]跟蹤上次登錄和當前登錄的時間戳。

2]保持用戶的所有成功登錄的運行計數。

3]跟蹤失敗的登錄嘗試並在一定次數的失敗嘗試後鎖定用戶。 (我們不會發送電子郵件來解鎖帳戶,這是因爲用戶會打電話,驗證他們的身份,然後手機上的人員會通過重新設置一個標誌來解鎖帳戶。請建議是否有另一個更好的選擇)

4]記住我的功能。

在此先感謝您的幫助!

+0

如果您不知道在用戶模型中添加登錄總數和登錄時間戳,那麼從頭開始構建完整身份驗證gem可能很困難。 – user482594

+0

,我認爲他們不會涵蓋這一點,因爲它們非常簡單,很容易實現。 – user482594

+0

我知道這是微不足道的。但我正在尋找關於「安全」的提示。謝謝! –

回答

1

1]將兩個時間戳字段添加到您的表以跟蹤這些參數:last_login_timecurrent_login_time。當用戶登錄last_login_time = current_login_timecurrent_login_time = Time.now

2]添加logins_count現場爲您表,並增加它在每次登錄

3] 3.1添加字段fails_count每次增加它時,登錄不成功,並在登錄成功復位 3.2如果fails_count等於一些數字,則添加布爾字段'blocked'並將其設置爲true

+0

謝謝弗拉基米爾。這正是我正在尋找的。 –

2

我認爲所有自稱爲「新手」的陷阱都是他們總是希望從頭開始構建一切! = P

你說得對,那裏有許多驗證寶石。我強烈建議在嘗試推出自己的產品之前深入挖掘它們,因爲有很多粘性斑點來確保您的身份驗證系統的功能性和安全性。

我會推薦檢查設計(https://github.com/plataformatec/devise),這是我在我的項目上使用的。如果它沒有爲您提供開箱即用的大部分功能,通過修改註冊控制器來添加它幾乎是微不足道的。再說一遍,如果它沒有開箱即用,一般的做法是 - 爲你的用戶模型添加last_login,current_login,login_count,failed_attempts。 - 覆蓋設計註冊控制器,並確保所有這些值都會在需要時更新。

另一方面,Devise提供了通過電子郵件恢復密碼的功能,但您可以輕鬆禁用該功能,以強制用戶通過呼入/驗證。

您考慮的另一個入門點是新的Rails 3.1(尚未正式發佈)。但是包含了很多更新以幫助您構建更好的身份驗證系統。看看這個railscast的更多信息:http://railscasts.com/episodes/270-authentication-in-rails-3-1

+0

David,謝謝你的回覆。這一定會讓我繼續。 –