gpt4 book ai didi

php - 切换到 PDO 后,Password_Verify 总是返回 false?

转载 作者:行者123 更新时间:2023-11-29 11:33:01 25 4
gpt4 key购买 nike

出于某种原因,无论如何,Password_Verify 都会返回 false。我已经对从数据库返回的哈希值进行了 var_dump,它是正确的(60 个字符)。我知道我输入的密码是正确的。我知道在我切换到 PDO 之前,这种方法确实有效(根据我的阅读,PDO 更安全。另外,我喜欢使用参数化查询的想法)。

您可以看到我的旧代码正在运行(已被注释掉)。 PDO 返回的哈希有什么不同?

<?php
/* When we have all of the input, try to login */
if(isset($_POST['id']) && isset($_POST['password'])){

/* Connect to the database */
//$dbHandle = new Database();
//$dbHandle -> connect();

/* Santitize input to prevent SQL Injection */
//$password = $dbHandle -> sanitize($_POST['password']);
//$id = $dbHandle -> sanitize($_POST['id']);

$password = $_POST['password'];
$id = $_POST['id'];

trim($password);
trim($id);

// Query the Database for the users info
$stmt = $dbHandle -> prepare("SELECT `password`, `admin`, `firstname`, `lastname` FROM users WHERE `id` = :id");
$stmt -> bindParam(":id", $id, PDO::PARAM_INT);
$stmt -> execute();
$result = $stmt -> fetch(PDO::FETCH_ASSOC);

//$result = $dbHandle -> query("SELECT `password`, `admin`, `firstname`, `lastname` FROM users WHERE `id`=$id") -> fetch_assoc();
$hash = $result['password'];

echo($hash . "<br>");
echo(var_dump($hash));
echo($password);
echo(var_dump(password_verify($password, $hash)));
/* Check to see if the user entered the correct password */
if(password_verify($password, $hash)){

//Login
$_SESSION['loggedin'] = true;
$_SESSION['admin'] = $result['admin'];
$_SESSION['name'] = $result['firstname'] . ' ' . $result['lastname'];

/* Update "lastlogin"
** Remember that SQL expects datetime's to be inside single quotes (to make it a string)
*/
$timestamp = date("Y-m-d h:i:s");
$dbHandle -> query("UPDATE `users` SET `lastlogin`='$timestamp' WHERE `id`=$id");

//Send user to home page
header('Location: home.php');

} else {
echo("
<p style='color:red;'>Wrong ID/Password</p>
");
}
}
?>

所有这些 echo 和 vardump 的结果如下

脚本的输出

enter image description here

最佳答案

检查是否

$dbHandle -> sanitize($_POST['password']);

$password = $_POST['password'];       
trim($password);

为您的密码生成完全相同的内容。

如果不是:这就是您面临的问题。与 PDO 无关,您可能在存储哈希值之前修改了密码......

如果是:如果您使用正确的密码,代码应该不会失败。

关于php - 切换到 PDO 后,Password_Verify 总是返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com