【发布时间】:2015-09-10 04:31:53
【问题描述】:
我是 PHP 新手,正在尝试检查用户(登录页面)提供的密码是否与存储在数据库中的散列密码匹配。
数据库中的密码通过$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT);(与我用于用户输入的方法相同)进行散列处理,并存储在VARCHAR(255) 列中。
我现在尝试使用 password_verify 将其与用户输入进行比较,但出现以下错误,这是由 else 部分引起的。
有人可以告诉我我在这里做错了什么吗?
我也尝试删除“== true”,但这也不起作用。
我的 PHP:
$email = $_POST["email"];
$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT);
$stmt = $conn->prepare("SELECT email, pw FROM Users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
if(mysqli_num_rows($result) == 0){
echo "Email has not been registered yet";
}else{
if(password_verify($pw, $result["pw"]) == true){
echo "Password correct";
}else{
echo "Password incorrect";
}
};
错误:
"Fatal error: Cannot use object of type mysqli_result as array..."
更新:
对我来说,这与另一个被称为可能重复的问题不同,因为在我的情况下,我要么得到上述错误,要么(当遵循下面的 Bing 方法时)结果总是“密码不正确”——与输入无关。
提前非常感谢。
【问题讨论】:
-
print_r($result)转储你的结果,它是对象,可以通过$result->pw检索 -
$pw包含用户输入密码的哈希值。因此,当您执行password_veryify()时,实际上是根据数据库中的哈希值检查密码哈希值。您应该根据数据库中的哈希检查用户提供的原始密码。 -
PHP 错误的第一条规则:使用 Google 搜索错误消息。
-
@Jeemusu 该错误与
password_hash()无关,与mysqli有关 -
没错,流浪汉,但是一旦解决了你就会发现
password_verify()确实存在问题。