当我运行下面的代码时,password_verify不返回任何内容。我试着回声,看看又回来了,什么也没打印。
我也回应了存储的pw,以确保这不是问题,不是问题。我回应了用户的输入,这似乎也很好。
我使用的密码之一是Grayson,哈希值为$ 2y $ 10 $ iK5pADTskgcfo6KRnBXs3e / 0LkclrsZb3DSo1bmLubLqd.aaIdnK2
<?php
$loginEmail = $_POST['loginEmail'];
$loginPassword = $_POST['loginPassword'];
$link = mysqli_connect("localhost", "cjramire_wrdp1", 'password', "username");
$query = "SELECT * FROM `Users` WHERE email = '".mysqli_real_escape_string($link, $loginEmail)."'";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result);
echo $row['password'];
echo $loginPassword;
$verify = password_verify($loginPassword, $row['password']);
echo $verify;
if($verify){
echo "Its a match";
}else{
echo "nope";
}
让我知道是否还有其他信息对您有帮助,谢谢!
下面,我添加了用于将信息推送到数据库中的代码,因为您可以看到pws在被推送到数据库之前已被散列。
$signUpEmail = $_POST['signUpEmail'];
$signUpPassword = $POST['signUpPassword'];
$hash = password_hash($signUpPassword,PASSWORD_DEFAULT);
$link = mysqli_connect("localhost", "cjramire_wrdp1", 'password', "username");
$query = "INSERT INTO `Users` (`email`, `password`) VALUES('$signUpEmail', '$hash')";
mysqli_query($link, $query);
答案 0 :(得分:2)
根据php.net,password_verify()
的第二个参数必须为
由password_hash()创建的哈希。
取自php.net
您的第二个参数似乎是SQL查询的结果,因此,如果您不将密码存储为password_hash()
创建的哈希,password_verify()
将无法正常工作
答案 1 :(得分:1)
这个问题是1年6个月大,但我遇到了同样的问题。经过一番努力,我找到了解决方案,因此想在这里分享。
问题在于MySQL表列中接受密码的值的长度。我将列类型varchar设置为存储密码,并且此列的值长度设置为50个字符。我将密码列的长度更改为200个字符,这解决了我的问题。看起来MySQL无论如何都接受varchar中的输入,但仅首先接受设置为列长的许多字符,这成为完整生成的散列的原因未存储在数据库中。
我希望这可以帮助任何再次遇到此问题的人。
答案 2 :(得分:0)
因此,我将密码“ myPassword”与password_hash()
一起使用以生成哈希值,以模拟存储在数据库中的哈希值。我生成的哈希是:
$signUpPassword = 'myPassword';
$hash = password_hash($signUpPassword,PASSWORD_DEFAULT);
我生成的哈希是:
'$2y$10$/oQgn.v5Nb3WB1Nf3LK0B.ZAjynRICezFez936e5Kl5vd3KMwO9oa'
您的哈希应该与上面的哈希相似。
然后我跑了
//Simulated db hash.
$dbHash = '$2y$10$/oQgn.v5Nb3WB1Nf3LK0B.ZAjynRICezFez936e5Kl5vd3KMwO9oa';
$loginPassword = 'myPassword';
$verify = password_verify($loginPassword, $dbHash);
if($verify){
echo "Its a match";
}else{
echo "nope";
}
结果是“匹配”。
我真的看不到为什么您的代码无法正常工作,但是这是我无法解决的原因。
PASSWORD_DEFAULT
的哈希值始终为60个字符,但将来可能会改变,因此,为了防止将来出现问题,请使列大小为255个字符。确保将数据库中的password列类型设置为varChar,而不是二进制数据类型。
在生成要插入数据库中的哈希时,请确保生成的哈希与插入数据库中的哈希匹配。这个想法可能是您的代码或数据库正在向您的哈希添加斜杠。
确保您使用相同的密码进行测试。
在将代码输入pasword_hash()
或password_verify()
函数之前,请确保代码未转义用户输入或数据。
您正在使用电子邮件地址查询数据库以提取用户记录。确保您没有多个相同的电子邮件地址。服务器可能正在向您提供错误的用户哈希。
希望有帮助。