如何解决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(); //fetch DB results
if (!empty($row)) { // checks if the user actually exists(true/false returned)
if (password_verify($upassword,$row['password'])) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
} else {
echo "Entered data is invalid."; // User login details entered does not match any in DB
}
$statement->close();
}
解决方法
存储在您的表上的密码是散列版本吗?
verify_password
的第一个参数是纯文本密码,在您的代码中,您正在对密码进行哈希处理并验证哈希值上的哈希值。
请参见php文档中的示例
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf',$hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
将您的verify_password
行更改为
password_verify($_POST['password'],$row['password'])
或者不要在开始时将其散列
$upassword = $_POST['password'];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。