三步而不是四步忘记了密码功能

时间:2011-12-21 17:32:05

标签: php forgot-password ezpublish

我正在使用EZ Publish CMS:

目前发生的事情:

  1. 在忘记密码页面,用户输入他们的电子邮件地址 用于注册和提交

  2. 用户收到一封包含密码生成链接的电子邮件 使用哈希来确认他们的身份。

  3. 用户收到一封包含新生成密码的电子邮件

  4. 用户使用其电子邮件中的链接返回网站 到一个要求输入旧密码的表单(刚生成的密码) 并已发送到他们的电子邮件)并让他们输入新的 密码

  5. 我想要发生的事情:

    1. 在“忘记密码”页面中,用户输入他们的电子邮件地址 用于注册和提交

    2. 用户会收到一封电子邮件,其中包含“输入新密码”表单

    3. 的链接
    4. 在“输入新密码”表单中,用户无需输入旧密码 密码因为身份已经被哈希确认了 因此只需要输入新密码。

    5. 我使用的是EZMBPAEX扩展程序,它具有原始的4步骤过程。 似乎没有关于删除“通过电子邮件向用户发送新密码”步骤的任何文档或讨论,但我的客户端有一个非常严格的没有通过电子邮件策略发送的密码,所以我无法展示此

      有谁知道我在哪里可以找到有关如何编辑此功能的文档?

      我认为需要编辑的文件位于:
      /extension/ezmbpaex/modules/userpaex/forgotpassword.php

2 个答案:

答案 0 :(得分:1)

首先创建一个为您生成随机字符串的函数,假设您需要创建一个包含32个字符的随机字符串,选择任意数量的字符

生成随机代码的功能,该代码将通过电子邮件发送并添加到db

 function genRandomString() {
 $length = 32;
 $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
$string ="";
for ($p = 0; $p < $length; $p++) {
    $string .= $characters[mt_rand(0, (strlen($characters))-1)];
}

return $string;
}

接下来,使用php myAdmin创建一个新表,一个表名为forgotten_passes,其中包含三列,假设您已经这样做了

   $key = genRandomString(); // assign random code
$assign = $db->query("INSERT INTO `YOUR_DB_NAME`.`forgotten_pass` (`email` ,`randomKey` , `time`)

    VALUES ('$email', '$key', CURRENT_TIMESTAMP );"); 

接下来发送一封电子邮件,其中包含指向resetpassword.php页面的链接(用户要求选择新密码并确认它的页面,但不要忘记将生成的密钥分配给get变量,这很简单,只需当你链接

www.yourdomain.com/pass_reset.php(ADD?secretkey = THE_GENERATED_HERE)

因此,发送到需要重置密码的人的电子邮件地址的链接应包含以下内容:

Hello用户名,要重置密码,请单击下面的链接或将其复制/通过浏览器

链接:http://www.yourdomain.com/pass_reset.php?secretKey=a12s236d5c8d4fkejus10a1s2d4c8741

当用户点击链接时,他会转到一个页面,在sql数据库中验证他的电子邮件及其相应的随机密钥,如果发现确实有一封电子邮件和那个随机的kay,那么用户确实已经确认了电子邮件,因此此页面应包含以下内容:

    <?php 
   if (isset($_GET['secretKey'])) {
   $secretKey = $_GET['secretKey'];

     // Check wether it really exist in database
   $sql = 'select * from forgotten_pass WHERE email=$The_User_Email and  randomKey='$secretKey'';

       }

现在,只计算行数以查看是否有返回的数据,如果返回的数据比用户真正连接到其收件箱并单击链接那样。

请执行以下操作:

     if mysql_num_rows($sql)>0 {         echo "Success, ";
     ?>
     // in this part type the html code which displays two inputs text, password
     // and confirm password that connect to database and update the user's password

     <form method="post" action="passupdate.php">
     <input name="password" value =""/>
     <input name"confirmedPassword" value=""/>
     <input type="submit" value="Save my new password"> 
     </form>
      <?php

      } else {

     echo "Sorry, invalid reset link";

     }

答案 1 :(得分:0)

当我更新插件时,它有我想要的步骤数。

相关问题