Password reset

完成帳號啟動之後,現在要處理忘記密碼。重設密碼的步驟跟帳號啟動有點類似,不過開頭不一樣,重設密碼需要改變 view 以及建立兩個表單,處理 email 提交和重設密碼提交。

首先,我們要先在登入頁面設定一個「forgot password」的連結:

點擊「forgot password」之後,會連到一個頁面,要求使用者輸入 email,然後再寄送含有重設密碼連結的郵件給使用者:

最後,使用者收到重設密碼的郵件,點擊裡面的網址,會連到重設密碼的頁面:

跟啟動帳號一樣,我們要建立一個重設密碼的 resource(Password Resets resource),每個重設密碼的操作都包含一組 reset token 和相對應的 reset digest,步驟如下:

  • 當使用者要求重設密碼時,透過使用者提供的 email 尋找該名使用者
  • 如果 email 確實存在於資料庫中,就產生一組 reset token 和相對應的 reset digest
  • 把 reset digest 存進資料庫,然後發送一封含有 reset token 的以及 email 的連結給使用者
  • 當使用者點擊連結,透過 email 尋找該名使用者,然後驗證 reset token 是否與 reset digest 匹配
  • 如果通過驗證,就顯示重設密碼的表單