只是記錄一下思路,具體實現(xiàn)可參考rails tutorial第10章節(jié),非常詳細。
用戶激活
- 在注冊的時候,隨機生成一個唯一的
token - 然后根據(jù)
token生成一個加密的字符串存儲在數(shù)據(jù)庫中activation_digest - 同時生成一個鏈接(該鏈接中包含剛剛生成的
token和用戶的email),發(fā)送到用戶的郵箱中。 - 當用戶打開該鏈接時,判斷鏈接中傳過來的
email和token是否正確,如果正確,則激活用戶并登錄。
密碼重設
- 通過
views,獲得忘記登錄密碼的郵箱 - 隨機生成一個
token - 根據(jù)
token生成一個加密的字符串存儲在數(shù)據(jù)庫中reset_digest,同時還生成一個reset_sent_at時間,用來判斷reset_digest的過期時間 - 生成一個鏈接(包含剛剛生成的
token和用戶的email),發(fā)送到用戶的郵箱中。 - 用戶打開鏈接后,得到一個重新輸入密碼的頁面(該頁面需要包含
email和token的屬性,以便后續(xù)的操作。因為token是公開的,所以可以顯示在url中,email則可以通過hidden_tag_field來隱藏顯示) - 用戶提交后,判斷兩次密碼是否都為空,判斷
email和token是否正確,判斷用戶是否是激活用戶,再判斷reset_diget是否過期。如果都正確,則密碼重設成功。