正如标题所示,在注册表单中对密码进行哈希处理后,我无法登录用户.我已经使用了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')";
这是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);
编辑:我在一天后想出了这个问题,不得不使用“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')";
b)如果用户尝试登录,只需从数据库WHERE email ='{$_POST [’email’]}获取哈希值,然后使用password_verify函数:
if (!password_verify($_POST['login_password'], $hash_from_database)) { exit; }
这有帮助吗?
标签:php,mysql,hash
来源: https://codeday.me/bug/20190609/1203487.html