Неправильно выполняется password_verify

100
05 августа 2019, 17:50

Код такой:

$user = R::find('user', 'login = ?', array($data['login']));
    if ($user) {
        if(password_verify($data['password'], $user->password)) {
            echo 'ok';
        }
        else {
            echo = 'Данные введены неверно';
        }
    }
    else {
        echo = 'Пользователь не найден';
    }

Он проверяет введёный логин и если аккаунт существует он проверяет пароль, а если верный и пароль то выводит "ok". Я создал в базе данных аккаунт с ником admin и паролем 123. Так вот пользователя он находит, но говорит что пароль введён не верно (выполняется 1-ый по счёту else).

Почему он видит логин, но не видит пароль? Что не так?(

Answer 1

Вам нужно использовать функции password_hash и password_verify в связке. Когда пользователь при регистрации задаёт пароль вы должны сгенерировать на его основе хэш:

$hash = password_hash($password, PASSWORD_DEFAULT);

Этот хэш вместе с логином нужно нужно занести в базу данных. Заметьте, что нельзя хранить пароль в открытом виде, т.к. это небезопасно. Поэтому мы используем хэширование пароля.

Когда пользователь при входе вводит логин и пароль, мы должны выбрать в базе данных запись, соответствующую введённому логину (если она есть). После этого мы проверяем? соответствует ли пароль хэшу, хранящемуся в базе данных:

if(password_verify($password, $hash)) {
    // Верный пароль
} else {
    // Неверный пароль
}
READ ALSO
Алгоритм заливки треугольника

Алгоритм заливки треугольника

Вот тут по сути алгоритм один и тот жеПодключил библиотеку, которая работает с изображениями

109
Массив с потокобезопасными объектами C++

Массив с потокобезопасными объектами C++

Допустим, у меня есть класс Foo

86
Как обратится к тексту на textEdit в qt?

Как обратится к тексту на textEdit в qt?

Мне нужно програмно изменить текст в QTextEditИ не знаю как к нему обратится, точнее к его тексту

114