无法在PHP中验证密码

时间:2017-02-11 15:44:36

标签: php hash bcrypt verify

在这个项目中,我使用 BCRYPT 来删除密码

登录时,用户通常无任何错误登录,但在尝试更改密码时,当前密码 与数据库中的密码不匹配(当然我&# 39; m使用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

1 个答案:

答案 0 :(得分:3)

您不需要在第二行哈希$_currentpassword变量。

只需将变量传递给password_verify函数,函数本身就可以完成这项工作。