2011-05-15 191 views
3

您好我正在創建一個簡單的使用CakePHP的忘記密碼系統,其中用戶將輸入他們的用戶名/電子郵件,然後收到一封帶有鏈接的電子郵件,他們可以點擊創建一個新密碼。CakePHP忘記密碼

我GOOGLE了四周,但沒有發現任何東西:/

使用CakePHP 1.3

+0

我想用戶名和密碼存儲在數據庫中,密碼存儲加密(散列加密)。但是你有沒有訪問數據庫? – sikas 2011-05-15 23:55:35

回答

12
  1. 顯示窗體的視圖,以便用戶可以輸入他們的電子郵件地址。
  2. 將表單發佈到reset_password控制器操作。
  3. reset_password控制器操作中查找this->data['User']['email']並將電子郵件地址存儲在數據庫表中。
  4. 這個相同的數據庫表應該有一個keytoken字段。該字段應該是CHAR(40)。在reset_password操作中,請執行$key = Security::hash(String::uuid(),'sha1',true)以創建密鑰或散列並將其存儲在keytoken字段中。
  5. 要生成URL做$url = Router::url(($this->here), true).'/'.$key裏面的控制器reset_password的操作。這將根據當前操作生成一個URL,並在用戶單擊該電子郵件鏈接時向其添加關鍵參數,您可以在該功能中驗證該參數。
  6. 您還需要設置Email組件才能在郵件正文中實際發送包含上面生成的URL的電子郵件。

這應該足以讓您朝着正確的方向前進。

+0

我喜歡你的答案,一切工作到目前爲止 - 但如何繼續發送郵件後?如何設置新密碼或首先訪問用戶? – Isengo 2016-11-01 21:32:47

3
  • 要求用戶提供他們的電子郵件。
  • 生成足夠長度的隨機字符串,將其存儲在數據庫中,並通過電子郵件將其發送給他們作爲鏈接。使其在24小時內過期。如果他們沒有要求新密碼,請告訴他們忽略電子郵件。
  • 匹配數據庫中的電子郵件和字符串。用表格向他們發送一個新密碼給他們發送一個新密碼(不同的隨機字符串)。
2

你可以看看兩個預的解決方案,可能滿足您的要求:

星火由Jedt插件 - https://github.com/jedt/spark_plug

用戶插件通過CakeDC - https://github.com/CakeDC/users

兩個有「忘記密碼」功能。你可以在你的項目中加入一個插件,從而獲得所有代碼的全部好處,或者你可以簡單地將他們的代碼挖掘到如何在你自己的項目中工作。