只是記錄一下思路,具體實(shí)現(xiàn)可參考rails tutorial第10章節(jié),非常詳細(xì)。
用戶激活
- 在注冊(cè)的時(shí)候,隨機(jī)生成一個(gè)唯一的
token
- 然后根據(jù)
token
生成一個(gè)加密的字符串存儲(chǔ)在數(shù)據(jù)庫中activation_digest
- 同時(shí)生成一個(gè)鏈接(該鏈接中包含剛剛生成的
token
和用戶的email
)磁餐,發(fā)送到用戶的郵箱中。 - 當(dāng)用戶打開該鏈接時(shí)恃鞋,判斷鏈接中傳過來的
email
和token
是否正確崖媚,如果正確,則激活用戶并登錄恤浪。
密碼重設(shè)
- 通過
views
畅哑,獲得忘記登錄密碼的郵箱 - 隨機(jī)生成一個(gè)
token
- 根據(jù)
token
生成一個(gè)加密的字符串存儲(chǔ)在數(shù)據(jù)庫中reset_digest
,同時(shí)還生成一個(gè)reset_sent_at
時(shí)間水由,用來判斷reset_digest
的過期時(shí)間 - 生成一個(gè)鏈接(包含剛剛生成的
token
和用戶的email
)荠呐,發(fā)送到用戶的郵箱中。 - 用戶打開鏈接后砂客,得到一個(gè)重新輸入密碼的頁面(該頁面需要包含
email
和token
的屬性泥张,以便后續(xù)的操作。因?yàn)?code>token是公開的鞠值,所以可以顯示在url中媚创,email
則可以通過hidden_tag_field
來隱藏顯示) - 用戶提交后,判斷兩次密碼是否都為空彤恶,判斷
email
和token
是否正確钞钙,判斷用戶是否是激活用戶,再判斷reset_diget
是否過期声离。如果都正確芒炼,則密碼重設(shè)成功。