首页 > 解决方案 > PHP密码验证无法验证

问题描述

我正在做一些类型的项目要发送。但现在我会坚持使用 password_verify 方法

//Login Existed User

if (isset($_POST['login'])) {
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $password = mysqli_real_escape_string($con, $_POST['password']);

    //$password = password_verify($con, $password);
    $cmmnd = "SELECT * FROM user WHERE email = '$email' AND password ='$password'";
    $run = mysqli_query($con, $cmmnd);

    if ($run -> num_rows > 0) {
        $data2 = $run -> fetch_array();
        if (password_verify($password, $data2['password'])) {
            header("Location: mainpage.php");
        }
    }else {
        echo "<script>alert('ID or Password Are Wrong!');
                                window.location= 'user.php'</script>";
    }
}

上面是登录脚本。

这里注册码

if (isset($_POST['register'])) {
    $fname = mysqli_real_escape_string($con, $_POST['fname']);
    $remail = mysqli_real_escape_string($con, $_POST['remail']);
    $rpswd = mysqli_real_escape_string($con, $_POST['rpswd']);

    $hash = password_hash($rpswd, PASSWORD_DEFAULT);
    $sql = "INSERT INTO `user` (`name`, `email`, `password`) VALUES ('$fname', '$remail','$rpswd')";
    $data = mysqli_query($con, $sql);

    header("Location: regist.php");

}

注册很好,但现在我无法登录。我真的很感谢你的帮助。先感谢您

标签: phppasswordspassword-hash

解决方案


首先你需要调整你的注册脚本。切换到准备好的语句并将散列插入数据库而不是纯文本密码。

if (isset($_POST['register'])) {
    $hash = password_hash($_POST['rpswd'], PASSWORD_DEFAULT);
    $stmt = $con->prepare('INSERT INTO `user` (`name`, `email`, `password`) VALUES (?,?,?)');
    $stmt->bind_param('sss', $_POST['fname'], $_POST['remail'], $hash);
    $stmt->execute();

    header("Location: regist.php");
    exit; // always add after header("Location: 
}

确保数据库中的密码字段是VARCHAR(255)并且字符集是utf8mb4. 还要确保您重定向到的页面regist.php是正确的。

password然后在您的登录页面上,您必须根据提供的电子邮件从数据库中获取单个字段。然后,您可以使用该值(如果存在)来检查password_verify(). 如果哈希匹配,那么您可以重定向。如果没有,那么您将显示一条消息。

//Login Existed User
if (isset($_POST['login'])) {
    $stmt = $con->prepare('SELECT password FROM user WHERE email = ?');
    $stmt->bind_param('s', $_POST['email']);
    $stmt->execute();
    $result = $stmt->get_result();

    $data2 = $result->fetch_array();
    if ($data2 && password_verify($_POST['password'], $data2['password'])) {
        header("Location: mainpage.php");
        exit;
    }

    // If the login was unssuccesful then display a message
    echo "<script>alert('ID or Password Are Wrong!');
                window.location= 'user.php'</script>";
}

推荐阅读