如果这是一个愚蠢的问题,或者如果它在错误的地方,我会提前道歉。这是我第一次来这里。我整天都被困在这一天,似乎无法解决这个问题。我之前从未使用过bcrypt,但我遵循了几个在线教程,并且我能够创建一个正常运行的注册页面。 这是加密代码:
$password = password_hash($password, PASSWORD_DEFAULT)."\n";
注册页面工作正常,密码在数据库中加密。根据我的理解,在登录页面中发生的事情是我们使用Select语句获取用户输入的用户名/电子邮件的哈希密码,然后我们使用password_verify。所以这是我的代码:
$email = $_POST['user_email'];
$password = $_POST['user_password'];
$stmt = $db->prepare("SELECT Password FROM user WHERE Email= :email");
$stmt->execute(array(':email' => $email));
$hash = $stmt->fetchColumn(0);
if (password_verify($password, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
出于某种原因,它仍然一直说"密码无效"。我尝试打印select语句返回的哈希,以确保它是数据库中的那个,它是。我还尝试复制哈希并将其放在password_verify中以尝试找出问题所在,但它仍然无法工作。你有什么想法吗?
谢谢大家:o)
答案 0 :(得分:2)
当您生成哈希时,请不要使用."\n"
向其添加换行符我非常确定您将其保存到数据库中。它在打印时看起来很好,但从未验证过。
$password = 'test';
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($password, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
Password is valid!