2013-09-09 6 views
2

У меня возникли небольшие проблемы с концептуальным управлением сбрасыванием пароля, если пользователь забыл свой пароль. Я пытаюсь смоделировать мою систему после ответа this.Сброс пароля Backend Functionality

Вот моя текущая настройка:

  1. щелкает пользователь забыл пароль канала связи на странице
  2. страница предложит им ввести свой адрес электронной почты
  3. пользователь вводит адрес электронной почты и ударяется «Отправить мне мой info "
  4. Когда пользователь нажимает« Отправить мою информацию », новая запись создается в моей таблице password_change_requests со случайным идентификатором, временем и именем пользователя.
  5. Я посылаю пользователю ссылку, которая находится в формате http://mysite.net/resetpassword.php?id=xxx&username=yyy
  6. Файл resetpassword.php GETs идентификатор и имя пользователя
  7. resetpassword.php проверяет для строки в password_change_requests, который имеет имя и время, которое еще не expired
  8. Если строка найдена, удостоверьтесь, что идентификатор получен от совпадений с хэшированным идентификатором в этой строке.
  9. Если идентификатор подтвержден, то echo html с формами и кнопками для ввода нового пароля
  10. Попробуйте отправить новый пароль на другой скрипт php, который проверяет новый пароль и подтверждает новый пароль. verifyNewPassword.php

Мой дизайн должен быть испорчен каким-то образом, потому что я не могу понять, как отправить пользователя обратно resetpassword.php, если пароли не совпадают в verifyNewPassword.php. Я не могу просто дать им ссылку, чтобы переслать их обратно на resetpassword.php, потому что для этой ссылки также нужен идентификатор и имя пользователя из GET. Я попытался отправить данные GET из файла resetpassword.php, чтобы проверитьNewPassword.php, но я не могу понять это, поскольку html находится внутри эха. Вот краткое изложение моего кода:

resetpassword.php:

if ($tokenFound) { 
    echo "<html> 
<body> 
<h1>Password Reset</h1> 
<form action='verifyNewPassword.php' method='post'> 
<input type='password' name='password' placeholder='New Password'><br> 
<input type='password' name='confirmpassword' placeholder='Confirm New Password'><br><br> 
<input type='submit' value='Reset Password'> 
</form> 

</body> 
</html>"; 
    } 
    else { 
    //notify user token is expired or not found. try to reset password again 
    echo "not a valid token"; 
    } 

verifyNewPassword.php:

if ($password != $confirmpassword) { 
    print "Passwords don't match. Click <a href=\"resetpassword.php\">here</a> to try again.<br/>"; 
    } 
    else { 
    echo "passes match"; 
    } 
+0

Вы могли бы рассмотреть возможность удаления всего кода (и головные боли) и используя вместо этого: HTTP: //www.php -login.net/ – Levi

+0

Я думаю, что ваш 'verifyNewPassword.php' должен находиться внутри' if ($ tokenFound) 'раздела. потому что здесь вы также должны проверить токен. или кто-то может сменить пароль кого-либо. вы также должны отправить 'id' и' username' обратно в скрытые поля. – bansi

ответ

1

В любом случае вы напишете это, вы будет нужны эти значения xxx и yyy в verifyNewPassword.php. Лучшее решение могло бы сэкономить их при скрытых вводах при передаче resetpassword.php, отправить их вместе с POSTED-значениями и еще раз подтвердить их проверкойNewPassword.php.

Если вы хотите избежать ссылки, вы можете отправить ответ 303 с заголовком Location, установленным на http://mysite.net/resetpassword.php?id=xxx&username=yyy, с другим необязательным флагом, если вы хотите отобразить сообщение об ошибке.

+0

Но как мне отправить значения xxx и yyy через POST из resetpassword.php? Я не могу понять, как сделать что-то вроде

. –

+0

Используйте скрытые входы в форме HTML и скопируйте значения. –

+0

Большое спасибо. Я не знал о скрытом типе ввода html. –

0

Я в конечном итоге передавая значение идентификатора и имени пользователя из ResetPassword проверить пароль следующим образом:

if ($tokenFound) { 
    echo '<html> 
<body> 
<h1>Password Reset</h1> 
<form action="verifyNewPassword.php" method="post"> 
<input type="password" name="password" placeholder="New Password"><br> 
<input type="password" name="confirmpassword" placeholder="Confirm New Password"><br><br> 
<input type="hidden" name="username" value="' . $username . '"> 
<input type="hidden" name="id" value="' . $id . '"> 
<input type="submit" value="Reset Password"> 
</form> 

</body> 
</html>'; 
    } 
    else { 
    //notify user token is expired or not found. try to reset password again 
    echo "not a valid token"; 
    }