Как я могу использовать PHP для проверки правильности пароля и пин-кода перед входом в систему? - PullRequest
0 голосов
/ 31 марта 2020

Я использую следующий сценарий для входа в систему пользователей, в данный момент пользователи отправляют электронное письмо и пароль, и, если они верны, он регистрирует пользователя:

    <?php
/* User login process, checks if user exists and password is correct */

// Escape email to protect against SQL injections
$email = $mysqli->escape_string($_POST['email']);
$result = $mysqli->query("SELECT * FROM users WHERE email='$email'"); 

if ( $result->num_rows == 0 ){ // User doesn't exist
    $_SESSION['message'] = "User with that email doesn't exist!";
    header("location: error.php");
}
else { // User exists
    $user = $result->fetch_assoc();

    if ( password_verify($_POST['password'], $user['password']) ) {

        $_SESSION['email'] = $user['email'];
        $_SESSION['first_name'] = $user['first_name'];
        $_SESSION['last_name'] = $user['last_name'];
        $_SESSION['active'] = $user['active'];

        // This is how we'll know the user is logged in
        $_SESSION['logged_in'] = true;

        header("location: profile.php");
    }
    else {
        $_SESSION['message'] = "You have entered wrong password, try again!";
        header("location: error.php");
    }
}

Я добавил столбец для 'pin' к форме регистрации и добавил ее в базу данных, и при регистрации установлен пин-код, однако я изо всех сил пытаюсь получить вышеуказанный код входа в систему, чтобы убедиться, что введенный пин-код тоже правильный, пин-код также отправляется через POST в форме входа в систему. я пробовал это:

else { // User exists
    $user = $result->fetch_assoc();

    if ( password_verify($_POST['password'], $user['password']) && ( password_verify($_POST['pin'], $user['pin'])  ) {

        $_SESSION['email'] = $user['email'];
        $_SESSION['first_name'] = $user['first_name'];
        $_SESSION['last_name'] = $user['last_name'];
        $_SESSION['active'] = $user['active'];

Однако я не могу получить правильный синтаксис, также пароль_верификации используется для хешированных паролей, но пин-код не хэшируется.

Как я могу изменить этот сценарий входа в систему, чтобы проверить и пароль, и хэш-код перед входом в систему?

1 Ответ

1 голос
/ 31 марта 2020

Если пин-код не хэширован, сравните его как строку.

if (password_verify($_POST['password'], $user['password']) && 
      (strcmp($_POST['pin'], $user['pin']) == 0)) {
    // Do you stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...