Три, а не четыре шага забыли пароль - PullRequest
5 голосов
/ 21 декабря 2011

Я использую CMS EZ Publish:

Что в данный момент происходит:

  1. На странице забытого пароля пользователь вводит адрес электронной почты, который он использовал для регистрациии отправляет

  2. Пользователь получает электронное письмо со ссылкой для создания пароля , в которой используется хеш для подтверждения их личности.

  3. Пользователь получает электронное письмо со сгенерированным паролем

  4. Пользователь возвращается на сайт, используя ссылку из своего электронного письма, которая переводит его в форму, запрашивающую старый пароль (который был только что сгенерирован и имеетбыло отправлено на их электронную почту) и для них необходимо ввести новый пароль.

Что я хочу, чтобы произошло:

  1. Из "забыл пароль""пользователь вводит адрес электронной почты, который он использовал для регистрации, и отправляет

  2. Пользователь получает электронное письмо со ссылкой на форму" введите новый пароль "

  3. В форме «введите новый пароль» пользователь не требуетсячтобы ввести старый пароль, потому что идентификация уже была подтверждена хешем и, следовательно, нужно только ввести новый пароль.

Я использую расширение EZMBPAEX, которое имеет оригинальный 4-х шаговый процесс.Кажется, что нет никакой документации или обсуждения об удалении шага «отправьте пользователю новый пароль по электронной почте», но у моего клиента очень строгий нет паролей, отправленных политикой электронной почты , поэтому я не могу с этим смириться.

Кто-нибудь знает, где я могу найти документацию о том, как редактировать эту функцию?

Я думаю, что файл, который необходимо отредактировать, находится в:
/extension/ezmbpaex/modules/userpaex/forgotpassword.php

Ответы [ 2 ]

1 голос
/ 05 января 2012

Прежде всего создайте функцию для генерации случайной строки для вас, скажем, вам нужно создать случайную строку из 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 (ДОБАВИТЬ? Secretkey = THE_GENERATED_HERE)

поэтому ссылка, отправленная на адрес электронной почты человека, которому необходимо сбросить пароль, должна содержать что-то вроде:

Здравствуйте, имя пользователя, для сброса пароля нажмите на ссылку ниже или скопируйте / вставьте его в свой браузер

Ссылка: http://www.yourdomain.com/pass_reset.php?secretKey=a12s236d5c8d4fkejus10a1s2d4c8741

Когда пользователь нажимает на ссылку, он переходит на страницу, которая проверяет его электронную почту и соответствующий ей случайный ключ в базе данных sql, если он обнаружил, что на самом деле есть электронная почта и этот случайный ключ, то пользователь действительно подтверждает, что это адрес электронной почты, поэтому эта страница должна содержать что-то вроде ниже:

    <?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";

     }
0 голосов
/ 12 января 2012

Когда я обновил плагин, у него было количество шагов, которое я хотел.

...