2012-01-04 98 views
3

這個問題可能有點抽象,但我想知道實現密碼恢復的最佳/標準方法是什麼。我試圖在我的代碼中實現它,但我開始使用的方法似乎有點迂迴/混亂,我想知道「Rails方式」是做什麼的。有什麼建議麼?Rails - 密碼恢復

+0

設計實現了大部分模式,看看https://github.com/plataformatec/devise – clyfe 2012-01-04 00:05:44

回答

6

通常應該對密碼進行散列(理想情況下用鹽)而不是加密,以便它們不能被解密。然後,爲了檢查用戶是否正確輸入密碼,你需要輸入他們所輸入的內容並使用相同的salt和散列函數,並查看它是否與數據庫中的散列相匹配。

以這種方式存儲,密碼不能恢復。着手恢復丟失密碼的標準方法是:

  1. 鮑勃進入他的電子郵件地址(或用戶名或其他),以表明他是
  2. A「密碼重置令牌」誰產生,一般的長字符串的字母和數字,並以某種方式存儲在與Bob關聯的數據庫中。
  3. 鮑勃發送與密碼的電子郵件重置令牌附着在某種程度上,通常在URL(例如,http://fakesite.com/reset_password?token=long_token_generated_in_step_2
  4. 當Bob訪問該網址,該網站驗證重置令牌是有效的,並允許鮑勃選擇密碼,然後將其醃製/以同樣的方式,因爲他失去的密碼散列。

設計,爲Rails認證的寶石,具有遵循此模式的Recoverable strategy

一些網站採用額外的安全檢查,罪ce電子郵件不是100%安全的。例如,您可能會要求,要獲取密碼重置電子郵件,用戶必須回答一個祕密問題(通常在創建帳戶時設置)。