0
我正在處理一個忘記密碼的頁面,並試圖找出最好的方法來做到這一點。目前,當用戶轉到頁面時,它會要求提供他們的電子郵件。該腳本檢查該帳戶是否存在,並向他們發送帶有鏈接的電子郵件以點擊重置其密碼。PHP管理忘記密碼
該鏈接包含一個令牌(僅僅是md5(uniqid())
)和用戶選擇新密碼時與數據庫匹配的電子郵件地址。它將令牌存儲在數據庫表password_resets
以及從現在開始的24小時到期日期以及其帳戶詳細信息的外鍵。
當用戶選擇一個新密碼時,它將令牌與password_resets
表相匹配,並將該電子郵件發送到該外鍵的電子郵件地址,並在設置新密碼並從password_resets
刪除記錄之前確保到期日期在將來。
這是一個有效的方法嗎?用於此目的的整個表格似乎是多餘的。有沒有更好的方法來做到這一點?
它是有效的,你不應該有任何問題。只需製作一個cron腳本來刷新過時的令牌。或者,您可以使用JWT令牌實現,這將消除對任何數據庫的需求。 – georoot
有點偏離主題,但'uniqid()'[不生成加密安全值](https://secure.php.net/manual/en/function.uniqid.php),所以你應該考慮使用一個替代隨機函數如''openssl_random_pseudo_bytes()' –
@ this.lau_他們使用'md5(uniqid())'並不是唯一的使用'uniqid()',並且與加密無關,它只能被用作唯一的令牌這非常適合。他們沒有提及或可能不知道的是使用安全(密碼)散列函數,如'password_hash()'。我認爲這個問題超出了他們發佈的內容。所以是的,有點偏離主題;-)''openssl_random_pseudo_bytes()'可能無法在其服務器上使用。 –