2011-05-15 137 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

两个有“忘记密码”功能。你可以在你的项目中加入一个插件,从而获得所有代码的全部好处,或者你可以简单地将他们的代码挖掘到如何在你自己的项目中工作。