无法在 PHP 中验证密码
Cannot verify password in PHP
在这个项目中,我使用 BCRYPT 对密码进行哈希运算
登录时,用户正常登录没有任何错误或任何错误,但是当尝试更改密码时,您当前的密码与数据库中的密码不匹配(当然我是用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
,最大长度为 255
编辑 2:这是 link 我的代码的完整副本。
您不需要在第二行中散列您的 $_currentpassword
变量。
只需将变量传递给 password_verify
函数,函数本身就会完成这项工作。
在这个项目中,我使用 BCRYPT 对密码进行哈希运算
登录时,用户正常登录没有任何错误或任何错误,但是当尝试更改密码时,您当前的密码与数据库中的密码不匹配(当然我是用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
,最大长度为 255
编辑 2:这是 link 我的代码的完整副本。
您不需要在第二行中散列您的 $_currentpassword
变量。
只需将变量传递给 password_verify
函数,函数本身就会完成这项工作。