У меня возникли небольшие проблемы с концептуальным управлением сбрасыванием пароля, если пользователь забыл пароль. Я пытаюсь смоделировать свою систему после этого SO-ответа.
Вот моя текущая настройка:
http://mysite.net/resetpassword.php?id=xxx&username=yyy
verifyNewPassword.php
Мой дизайн должен быть каким-то образом испорчен, потому что я не могу понять, как отправить пользователя обратно на resetpassword.php, если пароли не совпадают с проверкойNewPassword.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"; }
Любой способ, которым вы это пишете, вам понадобятся эти значения xxx
и yyy
в verifyNewPassword.php. Лучшее решение могло бы сэкономить их при скрытых вводах при передаче resetpassword.php, отправить их вместе с POSTED-значениями и еще раз подтвердить их проверкойNewPassword.php.
Если вы хотите избежать ссылки, вы можете отправить ответ 303 с заголовком Location
установленным на http://mysite.net/resetpassword.php?id=xxx&username=yyy
, с другим необязательным флагом, если вы хотите отобразить ошибку сообщение.
Я закончил тем, что передал значения id и username из 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"; }