【问题标题】:CakePHP Forgot PasswordCakePHP 忘记密码
【发布时间】:2011-08-26 02:32:24
【问题描述】:

您好,我正在寻找使用 CakePHP 创建一个简单的忘记密码系统,用户将在其中输入他们的用户名/电子邮件,然后收到一封电子邮件,其中包含他们可以单击以创建新密码的链接。

我用谷歌搜索过,但没有找到任何东西:/

使用 CakePHP 1.3

【问题讨论】:

  • 我猜用户名和密码存储在数据库中,密码存储加密(哈希加密)。但是您可以访问数据库吗?

标签: php cakephp


【解决方案1】:
  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,请在控制器 reset_password 操作中执行 $url = Router::url( ($this->here), true ).'/'.$key。这将根据当前操作生成一个 url,并在其上附加关键参数,当用户单击电子邮件链接时,您可以在同一函数中验证该参数。
  6. 您还需要设置Email 组件以实际发送包含上述生成的URL 在邮件正文中的电子邮件。

这应该足以让你朝着正确的方向前进。

【讨论】:

  • 我喜欢你的回答,到目前为止一切正常 - 但是发送邮件后如何继续?如何设置新密码或首次访问用户?
【解决方案2】:
  • 向用户询问他们的电子邮件。
  • 生成一个足够长的随机字符串,将其存储在您的数据库中,并将其作为链接连同他们的电子邮件一起通过电子邮件发送给他们。使其在 24 小时内过期。如果他们没有要求新密码,请告诉他们忽略该电子邮件。
  • 匹配数据库中的电子邮件和字符串。向他们提供表格以输入新密码通过电子邮件向他们发送新密码(不同的随机字符串)。

【讨论】:

    【解决方案3】:

    您可以查看两种可能适合您要求的预制解决方案:

    Jedt 的火花塞 - https://github.com/jedt/spark_plug

    CakeDC 的用户插件 - https://github.com/CakeDC/users

    两者都有“忘记密码”功能。您可以将其中一个插件包含到您的项目中,从而充分利用所有代码,或者您可以简单地挖掘他们的代码以使其在您自己的项目中工作。

    【讨论】: