Php密码验证问题
Php密码验证问题
当我尝试执行代码时,出现了“无效密码”错误。我想提一下,我在注册时也使用了相同的PASSWORD_BCRYPT函数。但是,当我在登录代码中实现它时,我没有成功。请告诉我我做错了什么,并帮助我修复这个错误。
另一件事是,我输入的是注册时为演示用户使用的相同/正确的密码。以下是登录的代码。
if(isset($_POST['login'])){ $user_name = ($_POST['user_name']); $upassword = password_hash($_POST['password'], PASSWORD_BCRYPT); $statement = $db->prepare("SELECT user_name, password, status FROM user_registration WHERE user_name = ?"); $statement->bind_param('s', $user_name); $statement->execute(); $statement->bind_result($user_name, $password, $status); $row = $statement->fetch(); //获取数据库结果 if (!empty($row)) { //检查用户是否存在(返回true/false) if (password_verify($upassword, $row['password'])) { echo '密码有效!'; } else { echo '无效密码。'; } } else { echo "输入的数据无效。"; //用户登录详细信息与数据库中的任何信息都不匹配 } $statement->close(); }
问题:Php密码验证问题
原因:在代码中将密码进行了哈希处理,然后进行了哈希验证,导致验证失败。
解决方法:参考php文档中的示例,将密码直接传入password_verify
函数进行验证。修改verify_password
行为password_verify($_POST['password'], $row['password'])
。或者在最开始不对密码进行哈希处理,直接将密码赋值给变量$upassword = $_POST['password'];
。
原始密码为"00000000",经过哈希处理后的值为"$2y$10$xQnz10jMPYZzt00.zZ8l.OW7cLmhI4lxEpFxDWirRXtxl9mIsJphq"。所以当使用密码"00000000"时会出现验证失败的错误提示。