2011-11-01 26 views
2

我正在使用忘記密碼功能。忘了密碼 - 我應該添加什麼字段?

用戶在忘記的密碼頁面輸入他們的電子郵件地址,然後通過電子郵件發送哈希令牌鏈接。

令牌將是這個樣子:

http://www.domain.com/account/resetpassword/4u240238402348239048092384908239080 

如果該鏈接,用戶點擊,然後它將搜索從用戶users表散列令牌。如果找到,則顯示文本字段以更改密碼。

我將使用hash("sha256",...)函數來生成哈希。

應該如何將散列存儲在users表中?

是否需要添加「reset_hash」和「reset_date」等字段?

+0

我也照顧用戶不能使用注入或其他方法來欺騙哈希。 – cutrightjm

回答

4

是的,您應該添加兩列:一個用於復位散列,另一個用於發出復位時的時間戳。後者應該用於確保密碼在一定的時間範圍內復位。

一旦密碼重置發生,散列和/或時間也應該被移除,以防止將來重置使用相同的散列。

+0

當密碼更改時,重置散列值和時間戳的值應該是多少?爲空/空白我猜? –

+1

@ user791022:是的,要麼都行。只要確保用戶不能訪問'http:// www.domain.com/account/resetpassword /',並對散列值爲空和空值的用戶發出密碼重置。 –

1

是的,將這些字段存儲在用戶表中是一個好主意。您可以檢查散列是否有效,並阻止將reset_date設置爲實際的日期時間。可能是存儲expire_date字段也是個好主意。

1

將散列存儲爲varchar(256),您可能需要一個請求日期,我會在收到請求時使用存儲time()的int字段,以便您可以簡單地執行time() - {dbtime }如果它超過了某個值,那麼請求已超時。

編輯:如上所述,當請求已完成時,應將這兩個字段都設置爲NULL。

1

你想做正確的事情,但我會建議創建一個單獨的表,這樣的一次性行動。對我來說,似乎用戶表並不是存儲此信息的正確位置。

如果您創建了一個單獨的表格,您可以稍後添加其他類型的操作,例如電子郵件確認等,並添加像截止日期之類的字段。如果執行該操作,則可以簡單地從表中刪除條目。