正如标题所暗示的那样,在对注册表单中的密码进行哈希处理后,我无法登录用户。我使用了 PHP 内置的 password_hash() 和 password_verify() 函数,但它在 signin.php 上使用了 password_verify(),我遇到了麻烦。我知道 password_verify() 的参数是一个哈希值,但是如何使用在 signup.php 中生成和存储的相同哈希值才能在此函数中使用?
注意:是的,这两套代码还有更多内容!数据库连接有效,所有未在这些位中定义的变量都定义了一些行。signup.php 工作完美,表单数据,包括散列密码成功存储在我的数据库中。
这是 signup.php 中实现哈希的部分:
$hash = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (id, full_name, email, password, username, sign_up_date, activated) VALUES ('', '$full_name', '$email', '$hash', '$username', '$date', '1')";
Run Code Online (Sandbox Code Playgroud)
这是 signin.php 的一部分,其中需要(大概相同)哈希: $password = mysqli_real_escape_string($_POST['password']);
if (!password_verify($password, $hash)) {
echo 'Invalid password.';
exit;
}
$sql = "SELECT id, email, password FROM users WHERE email = '$email' AND password = '$password' AND activated = '1' LIMIT 1";
$query = mysqli_query($conn, $sql);
Run Code Online (Sandbox Code Playgroud)
编辑:一天后我自己发现了这一点,不得不使用“SELECT * FROM ...”从数据库中检索存储的哈希值,然后将其与使用 password_verify() 输入的密码进行比较。不过还是谢谢你的帮助!
我很清楚问题出在哪里。您声明您已经将散列密码(带有password_hash())存储在您的数据库中。所以基本的工作流程是:
a) 将注册时给出的密码的哈希值保存在您的数据库中(不是明文密码):
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
$sql = "INSERT INTO users (id, full_name, email, password, username, sign_up_date, activated) VALUES ('', '$full_name', '$email', '$hash', '$username', '$date', '1')";
Run Code Online (Sandbox Code Playgroud)
b) 如果用户尝试登录,您只需从数据库中获取哈希值WHERE email = '{$_POST['email']},然后使用该password_verify函数:
if (!password_verify($_POST['login_password'], $hash_from_database)) { exit; }
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
我对你的问题很困惑,但我相信你想将注册用户的密码转换为哈希然后验证它?为什么还要验证密码?
但如果我的理解正确的话,你可以通过这种方式实现它:
$hash = password_hash($password, PASSWORD_DEFAULT);
if (!password_verify($password, $hash)) {
echo 'Invalid password.';
exit;
}
Run Code Online (Sandbox Code Playgroud)
密码将是您从用户那里获得的密码,您将其转换为哈希值然后验证它,但它对我来说仍然没有意义,为什么您要这样做?
| 归档时间: |
|
| 查看次数: |
25008 次 |
| 最近记录: |