我已经开始使用password_hash()进行密码散列。我遇到的问题是,当我使用password_verify()来检查输入值是否与存储在数据库中的哈希密码相匹配时,每次返回false时都是如此。
$password = "test";
$query = "SELECT password FROM user WHERE password = :pass ";
$statement = $connection->prepare($query);
$statement->bindParam(":pass", $password);
$statement->execute();
if(password_verify($password, $row['password'])){
echo "Password Valid";
}
else {
echo "Invalid Password";
}
但是,如果我从数据库复制一个哈希密码值并将其放在$ row ['password']的位置,当我测试代码时,它返回true。
if(password_verify($password, '$2y$10$kc09i9YSP.ExmUquMqRnf......')){
echo "Password Valid";
}
请帮助。
答案 0 :(得分:3)
第一个问题是您尝试使用SQL查找哈希密码。标准程序是找到具有给定用户名的用户,并获取该用户的密码以便您进行验证。
您的另一个问题是致电$row['password']
,但您尚未在代码中设置它。首先获取行,然后您可以验证密码。
这样的事情应该有效:
$username = "test";
$query = "SELECT password FROM user WHERE username = :username ";
$statement = $connection->prepare($query);
$statement->bindParam(":username", $username);
$statement->execute();
$row = $statement->fetch();
if(password_verify($password, $row['password'])){
echo "Password Valid";
}
else {
echo "Invalid Password";
}
答案 1 :(得分:-1)
<击>替换:击>
<击>$statement->bindParam(":pass", $password);
使用:
$statement->bindParam(":pass", password_hash($password, PASSWORD_DEFAULT));
击> <击> 撞击>
请使用Joel Hinz的答案