<?php
$stmt = $conn->prepare("SELECT users_email,users_password FROM `site_users` WHERE users_email = :users_email");
$stmt->bindParam(':users_email', $_POST["email"]);
$stmt->execute();
$result = $stmt->fetchAll();
if (password_verify('' . $_POST["password"] . '', $result[0]["users_password"]))
echo 'Valid';
else
echo 'Not Valid';
代码总是回应not valid
。我的代码有什么问题?
首先,我获取特定电子邮件的Hash_Password,然后使用PHP函数Password_Verify
进行验证。
答案 0 :(得分:0)
password_verify()
用于检查密码是否正确哈希。有关此功能的更多信息:password_verify()
您需要确认几件事
$result[0]["users_password"]
最后请发送您的散列数据以便从我们的结尾检查:)
$data = password_hash('lol',PASSWORD_DEFAULT);
$pass = 'lol';
if(password_verify($pass,
'$2y$10$kGlXgFHcw.wwF4N.3ZR2suIXzmwyv1AHxEwz14WGN12NM.9ETaexe')){
echo "done";
}
else{
echo 'not_done';
}
这是一个有效的例子。使用您发布的数据更改此代码,希望您将获得结果
答案 1 :(得分:0)
我认为你在下面有太多的引号。尝试替换
if (password_verify(''.$_POST["password"].'', $result[0]["users_password"]))
与
if (password_verify($_POST["password"], $result[0]["users_password"]))
因为$_POST["password"]
应该是字符串。如果你不确定它,你也可以这样做
$pwd = "" .$_POST["password"]; //force cast to string
if (password_verify($pwd, $result[0]["users_password"]))
{
echo 'Valid';
}
else
echo 'Not Valid';
}