解决了
我的注册表有一个奇怪的问题。JS 做了一些奇怪的事情,即使 password_verify 在登录时工作,哈希在某些情况下是不同的......现在我修复了我的代码,它现在可以工作了!谢谢大家!
解决了
我正在认真地试图弄清楚为什么我的 password_verify 代码已经 4 天没有工作了,我真的很困惑和生气......
首先,我不得不说会话已经开始,其他一切都在正常工作。
但是当我尝试创建一个 password_verify 脚本时,它仍然回显错误...
数据库中的字段被命名password
并设置为varchar 255
.
来自数据库的密码如下所示:
$2y$10$GEw0Ie6r/Udz2hgJVkCy.ut99NY5NE.h8LEvNM1gBizA1tY58iNa6
不错,应该是这个样子的。。。
当我在我的页面上回显数据库密码时,它显示相同,所以很好。但是当我这样做时password_verify
,它不起作用。它表明这password_verify
是错误的......我不知道为什么,因为我 100% 确定我在表单中输入的密码是正确的并且与 db 密码匹配。但是,它不起作用,并且不会像应有的那样回显“DONE”。
echo strlen
显示 60
echo $dbpassword
显示散列的数据库密码。
echo $passwordsubmitted
显示从表单正常输入的密码。
<?php
if(isset($_POST['changepassword'])){
if($_POST['username'] !== $_SESSION['username']){
echo "Invalid username";
}
else{
$stmtselectvalues = $mysqli->prepare("SELECT password FROM members WHERE username = ?");
$stmtselectvalues->bind_param('s',$_SESSION['username']);
$stmtselectvalues->execute();
$stmtselectvalues->bind_result($dbpassword);
$stmtselectvalues->store_result();
while($stmtselectvalues->fetch()){
$passwordsubmitted = $_POST['password'];
echo strlen($dbpassword)."<p>";
echo "Submitted password: ".$passwordsubmitted." and password from database: ".$dbpassword."<p>";
if(password_verify($passwordsubmitted, $dbpassword) == false){
echo "Invalid Password";
}
else{
echo "DONE!";
}
}
}
}
?>
<center>
<form method='POST'>
Username: <input type='text' name='username'><br>
Password: <input type='text' name='password'><br>
<input type='submit' name='changepassword'><br>
</form>
但是,当我使用这段代码时,它正在工作并且 echo 是“DONE”,所以这意味着 password_verify 是真的......
<?php
if(isset($_POST['changepassword'])){
if($_POST['username'] !== $_SESSION['username']){
echo "Invalid username";
}
else{
$dbpassword = password_hash("test", PASSWORD_BCRYPT);
$passwordsubmitted = $_POST['password'];
echo strlen($dbpassword)."<p>";
echo "Submitted password: ".$passwordsubmitted." and password from database: ".$dbpassword."<p>";
if(password_verify($passwordsubmitted, $dbpassword) == false){
echo "Invalid Password";
}
else{
echo "DONE!";
}
}
}
?>
<center>
<form method='POST'>
Username: <input type='text' name='username'><br>
Password: <input type='text' name='password'><br>
<input type='submit' name='changepassword'><br>
</form>
我真的不知道为什么会这样。有什么建议么?
更新
注册输入是<input type='password' name='password'>
注册时提交的密码使用以下代码进行哈希处理:
$password = $_POST['password'];
$passwordhash = password_hash($password, PASSWORD_BCRYPT);