php不用密码登录,使用散列密码登录PHP
正如標題所示,在注冊表單中對密碼進行哈希處理后,我無法登錄用戶.我已經使用了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
總結
以上是生活随笔為你收集整理的php不用密码登录,使用散列密码登录PHP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php绑定变量,php动态绑定变量的用法
- 下一篇: php网站制作商品结算怎么做,一种以让产