PHP Password Verify не может подтвердить - PullRequest
0 голосов
/ 11 января 2020

Я делаю несколько типов проектов для отправки. Но теперь я буду придерживаться метода 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 голосов
/ 11 января 2020

Прежде всего вам необходимо настроить скрипт регистрации. Переключитесь на подготовленные заявления и вставьте ha sh в базу данных вместо обычного текстового пароля.

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(). Если ха sh совпадает, вы можете перенаправить. Если нет, то вы отображаете сообщение.

//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>";
}
0 голосов
/ 11 января 2020

При регистрации вы сгенерировали ha sh для пароля. Но на странице входа вы передаете необработанный пароль в запрос на выборку.

...