【发布时间】:2020-07-25 17:47:05
【问题描述】:
我有一个密码被散列并使用以下代码保存到 SQL 数据库中:
$passHash = password_hash($password, PASSWORD_DEFAULT);
它被保存在一个名为“密码”的字段中,类型为 VARCHAR(255)
然后我使用以下代码登录用户
$dbconn = OpenCon();
$username = $_POST['usernameInput'];
$password = $_POST['passInput'];
$passHash = password_hash($password, PASSWORD_DEFAULT);
$school = $_POST['schoolInput'];
$sqlstmnt2 = 'SELECT * FROM users WHERE username = :username AND school = :school';
$stmtUsr2 = $dbconn -> prepare($sqlstmnt2);
$stmtUsr2 -> bindValue(':username', $username);
$stmtUsr2 -> bindValue(':school', $school);
$stmtUsr2 -> execute();
$rows = $stmtUsr2 -> fetchAll();
$n = count($rows);
if($n<1 or !password_verify($rows[0]['password'], $passhash)) {
echo 'No user account exists. Please check your credentials'."<br>";
}
else{
$_SESSION['username'] = $username;
header("Location: home.php");
}
当我运行它并输入我知道正确的详细信息时,password_verify 函数不会返回它们是相同的。我做错了什么?
【问题讨论】:
-
PASSWORD_VERIFY()来自手册password_hash()/password_verify()对的另一部分 -
请查看使用示例。您不是在验证实际密码,而是在验证新的哈希值。如果
password_hash()总是会产生你不需要password_verify()的相同哈希值,你可以简单地使用===。 -
啊,所以我看到我应该将 $password 传递给 password_verify 而不是实际的哈希值。我这样做并编辑了问题,但它仍然不接受它
-
password_verify($_POST['passInput'], $rows[0]['password']) -
我已恢复您的编辑并按照最初提出的问题回答了问题。