我在使用password_hash和password_verify函數驗證密碼時遇到了麻煩。 由於某些原因,它總是返回false。PHP - password_verify總是返回false
散列存儲在數據庫中,當用戶提供電子郵件和密碼時,如果存在提供的電子郵件的用戶記錄,則提供的通過和來自該用戶記錄的散列被驗證(這將返回false ,提供正確的密碼)。
代碼波紋管是用於測試目的,因爲它不是在真實背景下正常工作(與存儲在數據DATABSE)
繼承人一些代碼。
<?php
//create random password with 15 chars
$pass = generate_random_string(15);
$hash = password_hash($pass, PASSWORD_BCRYPT);
var_dump(password_verify($pass, $hash));
//returns bool(true)
直到這一部分一切正常,它創建一個pass,哈希它,當驗證返回true時。 現在怪異的部分。
if (isset($_GET['pass']) &&
isset($_GET['hash'])) {
var_dump(password_verify($_GET['pass'], $_GET['hash']));
//returns bool(false)
}
?>
如果我採用先前生成的值(pass和hash)並傳遞它們具有url參數並驗證它們,則返回false。
我在這裏做錯了什麼?
UPDATE
轉儲$ _GET數組顯示正確的參數和值。
您需要提供'password_verify'功能以及 – Derek
可以還轉儲$ _GET數組 - 我認爲你可能會假設一些在那裏不正確的東西...... –
當用戶發送密碼時,'hash'是否應該被存儲和使用? –