0
驗證密碼,在這個項目中,我使用BCRYPT進行哈希過的口令不能在PHP
在登錄時,用戶沒有任何錯誤或任何正常登錄,但試圖改變時您的密碼,您的當前密碼不與之相匹配的密碼數據庫
這裏是我的代碼片斷(當然我使用password_verify()
驗證兩個密碼):
$option = ['cost' => 12];
$password = password_hash($_currentpassword, PASSWORD_BCRYPT, $option);
$selectpasswordsql = "SELECT `password` FROM `auth` WHERE username=?";
$selectpasswordstmt = $conn->prepare($selectpasswordsql);
$selectpasswordstmt->execute(array($_SESSION['account']['username']));
$selectpasswordresults = $selectpasswordstmt->fetch(PDO::FETCH_ASSOC);
$databasepass = $selectpasswordresults['password'];
$databasepass = trim($databasepass);
if(password_verify($password,$databasepass)){
if(empty($passmsgs)){
$updatepasssql = "UPDATE `auth` SET
`password`=?
WHERE username=?
";
$updatepassstmt = $conn->prepare($updatepasssql);
$updatepassstmt->execute(array($password, $_SESSION['account']['username']));
if($updatepassstmt){
array_push($passmsgs, 'Successfully updating your password!');
} else {
array_push($passmsgs, 'There was a problem executing your command!');
}
}
} else {
array_push($passmsgs, 'Your current password is wrong!');
}
嘗試了這一點,將導致不符合密碼
編輯符合您當前密碼的錯誤:是的,我用VARCHAR
與
編輯2的最大長度:這是我的代碼的完整副本link。
password_verify會散列我的'current_password',所以確實需要它。你爲什麼認爲這不需要? – astronomicalXoom
我添加了一個鏈接來查看我的整個代碼,如果您需要 – astronomicalXoom
'password_varify'完成它需要做的事情,它不需要在外部散列密碼。 只需從數據庫傳遞用戶提交的密碼和舊密碼,它應該可以工作。 更多:[password_varify](http://php.net/manual/en/function.password-verify.php) –