У меня возникли небольшие проблемы с концептуальным управлением сбрасыванием пароля, если пользователь забыл свой пароль. Я пытаюсь смоделировать мою систему после ответа this.Сброс пароля Backend Functionality
Вот моя текущая настройка:
- щелкает пользователь забыл пароль канала связи на странице
- страница предложит им ввести свой адрес электронной почты
- пользователь вводит адрес электронной почты и ударяется «Отправить мне мой info "
- Когда пользователь нажимает« Отправить мою информацию », новая запись создается в моей таблице password_change_requests со случайным идентификатором, временем и именем пользователя.
- Я посылаю пользователю ссылку, которая находится в формате
http://mysite.net/resetpassword.php?id=xxx&username=yyy
- Файл resetpassword.php GETs идентификатор и имя пользователя
- resetpassword.php проверяет для строки в password_change_requests, который имеет имя и время, которое еще не expired
- Если строка найдена, удостоверьтесь, что идентификатор получен от совпадений с хэшированным идентификатором в этой строке.
- Если идентификатор подтвержден, то echo html с формами и кнопками для ввода нового пароля
- Попробуйте отправить новый пароль на другой скрипт 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";
}
Вы могли бы рассмотреть возможность удаления всего кода (и головные боли) и используя вместо этого: HTTP: //www.php -login.net/ – Levi
Я думаю, что ваш 'verifyNewPassword.php' должен находиться внутри' if ($ tokenFound) 'раздела. потому что здесь вы также должны проверить токен. или кто-то может сменить пароль кого-либо. вы также должны отправить 'id' и' username' обратно в скрытые поля. – bansi