PHP:密码验证不能与DB检索的哈希一起工作
我试图将密码与数据库中的哈希密码存储进行比较和输入。但是密码验证功能不起作用 以下是我对该表的查询:PHP:密码验证不能与DB检索的哈希一起工作,php,authentication,Php,Authentication,我试图将密码与数据库中的哈希密码存储进行比较和输入。但是密码验证功能不起作用 以下是我对该表的查询: $sql = "CREATE TABLE IF NOT EXISTS users ( id_users INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, user_password VARCHAR(255) NOT N
$sql = "CREATE TABLE IF NOT EXISTS users (
id_users INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL,
user_password VARCHAR(255) NOT NULL
)";
$db->exec($sql);
下面是密码的哈希函数:
$sql = $db->prepare("INSERT INTO users (username, user_password)
VALUES (:username, :user_password)");
$sql->bindParam(':username', $username);
$sql->bindParam(':user_password', password_hash($password, PASSWORD_DEFAULT));
$sql->execute();
最后,下面是我如何检索数据库的哈希密码以及如何验证:
#Récupération des données
$username= $_POST['username'];
$password= $_POST['mdp'];
#Connexion à la base de données
require_once 'inc/db.php';
#Vérification en BDD
$req = $db->prepare("SELECT user_password FROM users WHERE username = :username");
$req->execute([':username' => $username]);
$user = $req->fetch();
$pwd = $user->user_password;
if(password_verify($password, $pwd)){
echo '<br>true';
}else{
echo '<br>false';
}
但是,条件返回总是错误的。但是,当我这样做时,这是可行的:
$x = 'x';
$y = password_hash($x, PASSWORD_DEFAULT);
debug($y);
if(password_verify($x, $y)){
echo '<br>true';
}else{
echo '<br>false';
}
所以我假设问题来自于数据库中的存储
谢谢你的帮助: 不,所有变量都可以,我为每个变量都做了一个var_转储,输入密码是正确的,检索散列密码看起来也可以。它有60个字符长。如果错误报告不是你的事,请用var_转储替换密码验证。你没有将$pwd设置为任何值吗?$pwd内有什么?password\u verify的第二个参数必须是$user->userPassword。但是你在那里写了$pwd!?!因此,当我用var_dump替换password_verify时,它返回:string1 r string60$2y$10$AIoARRgHCDw9A7xGfKeBzuIxaOpXjs7qszUb9OhiZfaFLCIAyDfei,在$pwd中有:$2y$10$aioarrghcdw9a7xgfkebzuixaoxjs7qszub9ohizfaflciaydfei