我正在升级php登录系统以使用password_hash()。我从以下测试文件开始生成哈希:
$password="aaaaaaaa";
$hash = password_hash($password, PASSWORD_DEFAULT);
echo $hash."<br>";
if (password_verify($password, $hash)) {echo "Valid";}
else {echo "Invalid";}
然后我将屏幕上的哈希值直接复制并粘贴到db(mysql varchar(255)。登录时我验证:
if (password_verify($password, $hash)) {
$passwordIsValid=true;
//echo "VALID PASSWORD";
} else {
$passwordIsValid=false;
//echo "INVALID PASSWORD";
}
$ hash是从db获得的哈希值。这样可以正确验证我复制和粘贴的哈希值。
但是我添加了一个丢失的密码脚本,用户在其中输入新密码,然后通过AJAX将其发送到第二个脚本,这样就会输入密码:
$password=$_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($password, $hash))
{//write to db using PDO/prepared statements}
else {
echo "Invalid credentials";
exit();
}
当我尝试在密码更改后尝试登录时,password_valid()每次都返回false。如果我回去复制并粘贴它,那么就可以正确验证。
有人可以指出问题出在哪里吗?
答案 0 :(得分:1)
为您的密码添加修剪。
$password = trim($_POST["password"]);
并确保拥有良好的enctype(ISO,UTF ......但无处不在)。