【发布时间】:2020-12-26 11:45:31
【问题描述】:
当我尝试执行我的代码时,我收到了无效密码错误。我想提一下,我也在使用相同的 PASSWORD_BCRYPT 函数进行注册。但是,当我在登录代码中实现它时,我没有成功。请告诉我我做错了什么并帮助我修复错误。
另一件事是,我输入的密码与我在注册演示用户时使用的密码相同/正确。这是登录代码。
if(isset($_POST['login'])){
$user_name = ($_POST['user_name']);
$upassword = password_hash($_POST['password'], PASSWORD_BCRYPT);
$statement = $db->prepare("SELECT user_name, password, status FROM user_registration WHERE user_name = ?");
$statement->bind_param('s', $user_name);
$statement->execute();
$statement->bind_result($user_name, $password, $status);
$row = $statement->fetch(); //fetch DB results
if (!empty($row)) { // checks if the user actually exists(true/false returned)
if (password_verify($upassword, $row['password'])) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
} else {
echo "Entered data is invalid."; // User login details entered does not match any in DB
}
$statement->close();
}
【问题讨论】:
-
password列的长度是多少,你从代码中的$password得到什么值? -
@Qirel 长度为 Varchar (255)
-
password_verify()采用未散列的密码和散列密码进行比较。所以使用$upassword = password_hash($_POST['password'], PASSWORD_BCRYPT);意味着你重新散列密码,这将不匹配。 -
@Qirel 看来我迷路了。您能否重写我的代码,以便我可以将存储在数据库中的哈希密码与用户输入进行比较。谢谢。
标签: php authentication password-protection