php - 密码重置后端功能

标签 php mysql passwords

如果用户忘记了密码,我在如何从概念上处理密码重置方面遇到了一些麻烦。我一直在尝试在 this 之后为我的系统建模所以回答。

这是我当前的设置:

  1. 用户点击页面上的忘记密码链接
  2. 页面提示他们输入电子邮件地址
  3. 用户输入电子邮件地址并点击“向我发送我的信息”
  4. 当用户点击“发送我的信息”时,会在我的 password_change_requests 表中创建一个新条目,其中包含随机 ID、时间和用户的用户名。
  5. 我向用户发送格式为 http://mysite.net/resetpassword.php?id=xxx&username=yyy
  6. 的链接
  7. resetpassword.php 文件获取 id 和用户名
  8. resetpassword.php 检查 password_change_requests 中具有用户名和尚未过期的时间的行
  9. 如果找到行,则确保从 get 中获取的 ID 与该行中的散列 ID 匹配。
  10. 如果 id 已通过验证,则回显带有用于输入新密码的表单和按钮的 html
  11. 尝试将新密码发送到另一个验证新密码并确认新密码匹配的 php 脚本。 verifyNewPassword.php

我的设计一定存在某种缺陷,因为如果密码在 verifyNewPassword.php 中不匹配,我不知道如何将用户发送回 resetpassword.php。我不能只给他们一个链接,让他们点击将他们发送回 resetpassword.php,因为该链接还需要来自 GET 的 ID 和用户名。我尝试将 GET 数据从 resetpassword.php 发送到 verifyNewPassword.php,但我无法弄清楚,因为 html 在 echo 中。以下是我的代码摘要:

重置密码.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";
  }

验证新密码.php:

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

最佳答案

无论以何种方式编写此代码,您需要在 verifyNewPassword.php 中使用这些 xxxyyy 值。最好的解决方案是在传递给 resetpassword.php 时将它们保存在隐藏的输入中,将它们与 POSTed 值一起发送,并从 verifyNewPassword.php 再次验证它们。

如果您想避开该链接,您可以发送一个 303 响应,并将 Location header 设置为 http://mysite.net/resetpassword.php?id=xxx&username=yyy ,如果您想显示错误消息,可以设置另一个可选标志。

关于php - 密码重置后端功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18691464/

相关文章:

mysql - 使用 MySQL Workbench 从现有模式/模型创建数据库

c# - 清除包含敏感数据的 c# 字节数组

php - MySQL:是否可以在单行中给出mysql用户名和密码?

php - Mysql UPDATE WIth 多个 Where 语句

mysql - 在 SQL 中的同一字段上同时使用运算(或)与(和)(而不是不同的字段)

php - 通过 PDO+mySQL 排序不起作用

php - 清理Mysql表中的数据

mysql - 如何使用 shadow hash 从 unix 用户创建 mysql 用户

php - laravel echo 与 redis 和 socket io

php - 具有匹配特征的PHP数组的元素如何处理成一系列聚合?