PHP密码验证无法验证

时间:2020-01-11 06:45:53

标签: php passwords password-hash

我正在做一些要发送的项目。但是现在我会坚持使用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");

}

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

2 个答案:

答案 0 :(得分:0)

首先,您需要调整注册脚本。切换到准备好的语句,然后将哈希而不是纯文本密码插入数据库中。

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>";
}

答案 1 :(得分:-1)

注册时,您已经为密码生成了哈希值。但是,在登录页面中,您正在将原始密码传递给选择查询。