Страница входа в PHP не работает с password_verify - PullRequest
0 голосов
/ 20 апреля 2019

Итак, я хэшировал пароль для новых учетных записей, созданных на adduser.php, с этим:

if (isset($_POST['submit'])) {

    require "../functions/db-insert.php";
    $productcategory = [
        'username' => $_POST['username'],
        'password' => sha1($_POST['password']),
        'isadmin' => $_POST['isadmin']
    ];

    //$hash = password_hash($_POST['password'], PASSWORD_DEFAULT); 
    $category = insert($pdo, 'users', $productcategory);

    echo "<p>User added</p>";
}

и теперь я пытаюсь изменить свой login.php, чтобы иметь возможность правильно подписыватьиспользуя password_verify, но я, кажется, что-то делаю не так, как я больше не могу войти.

if (isset($_POST['submit'])) {

if (isset($_POST["username"]) && isset($_POST["password"]))  {


    $results = $pdo->prepare("SELECT * FROM users 
               WHERE username = :username AND password = :password");

    $values = [
        ':username' => $_POST["username"],
        ':password' => $_POST['password']
    ];

    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_DEFAULT);

    $results->execute($values);

    $row = $results->fetchAll();

    if(count($row) < 1){
        echo '<h3><strong>Wrong username or password!</h3>';
    }
    else if (!password_verify($password, $hash)){
        $_SESSION['loggedin'] = true;
        $_SESSION['name'] = $_POST['username'];
        echo "<h3>Welcome back " . $_SESSION['name'] . " !</h3>"; 
    }
  }
}

На данный момент, я не совсем уверен, что я делаю неправильно, и был бы очень признателен, если кто-томожет помочь мне разобраться с тем, что я делаю неправильно.Я просмотрел весь стекопоток, но, к сожалению, ни один из ранее заданных вопросов не работал для меня.

1 Ответ

0 голосов
/ 20 апреля 2019

Вы повторно хешируете пароль. Когда вы используете password_hash, вы не получаете одно и то же значение для одной и той же строки, поэтому вы никогда не найдете соответствия. Вам необходимо выбрать пароль (хэшированный) и затем передать необработанную строку (входные данные) в password_verify. Так что просто введите имя пользователя в where, затем используйте пароль результата и необработанную строку в password_verify

Попробуйте вывести password_hash того же значения (например, password_hash('test'....). И вы увидите. Вы также должны учитывать использование md5, это то, что вы делали раньше. Если это живая система, она будет Это будет сложно, так как вам нужно будет заставить всех поменять свой пароль или написать какую-нибудь подпрограмму для его обновления при следующем входе в систему (например, используйте старый метод проверки, затем password_hash () пароль и обновите его). Если это не рабочий код все же просто удалите свои пароли и начните снова.

Также я только что заметил, что вы сказали, что хотите войти в систему, если проверка пароля возвращает false, (!password_verify.... Так что ваша логика обратно на фронт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...