Loading...
PHP/MySQL | password_hash()
shadrvlad (30.10.2016 в 17:59)
Вилы_Выкидные, если не менял соль принудительно то все должно работать


пост 10
Вилы_Выкидные (30.10.2016 в 18:00)
вот шифруем и пишем в базу (каждый раз разный хеш на один и тот же вводимый пароль почему-то, как же потом сравнивать)



Выше отвечал :)
Каждый вызов функции генерирует новую соль, которая потом отображается в конечном хеше
Поэтому хеш всегда будет каждый раз новый
А вот почему false проверка вызывает, нужно разбираться
Например в пароле были/ввели пробел случайно или же не извлекаются данные из базы
Mobiaaa,

f (isset($_POST['send'])) {
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], $_POST['password']]);
if ($res and password_verify($_POST['password'], $res['password'])) {
$msg = 'Найдено';
} else {
query('insert into users set login = ?, password = ?', [$_POST['login'], password_hash($_POST['password'], PASSWORD_BCRYPT)]);
$msg = 'Не найдено, заносим в БД';
}
}
Вилы_Выкидные, Вы в базе ищите "чистый" пароль
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], $_POST['password']]);
А в insert пишете уже шифрованный
Вы разные данные сверяете
________
посл. ред. 30.10.2016 в 18:35; всего 1 раз(а); by Mobiaaa
Mobiaaa (30.10.2016 в 18:35)
Вилы_Выкидные, Вы в базе ищите "чистый" пароль
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], $_POST['password']]);
А в insert пишете уже шифрованный
Вы разные данные сверяете


ну так хеш первый раз пишется в базу а потом выводится через $res Для сравнения в verify_password :-)
Mobiaaa, ааа понял $res массив по чистому присваивается
Вилы_Выкидные, условие select никогда не выполнится
Цепочка действий скрипта + юзер
1) В базе нет данных о юзере
2) В базу пишем логин + хеш
3) При проверке сверяем логин + пароль (а там то у нас не пароль а хеш)
Следовательно первый запрос никогда не выполнится
Решение:
С select убрать проверку пароля, оставив только логин (она идёт ниже в условии password_verify)
Mobiaaa (30.10.2016 в 18:40)
Вилы_Выкидные, условие select никогда не выполнится
Цепочка действий скрипта + юзер
1) В базе нет данных о юзере
2) В базу пишем логин + хеш
3) При проверке сверяем логин + пароль (а там то у нас не пароль а хеш)
Следовательно первый запрос никогда не выполнится
Решение:
С select убрать проверку пароля, оставив только логин (она идёт ниже в условии password_verify)


if (isset($_POST['send'])) {
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], password_hash($_POST['password'], PASSWORD_BCRYPT)]);
if ($res and password_verify(password_hash($_POST['password'], PASSWORD_BCRYPT), $res['password'])) {
$msg = 'Найдено';
} else {
query('insert into users set login = ?, password = ?', [$_POST['login'], password_hash($_POST['password'], PASSWORD_BCRYPT)]);
$msg = 'Ошибка';
}
}

не работает

как же он будет работать если insert каждый раз заносит разный хеш?
________
посл. ред. 30.10.2016 в 18:49; всего 1 раз(а); by Вилы_Выкидные
Вилы_Выкидные,
if (isset($_POST['send'])) {
$res = assoc('select * from users where login = ?', [$_POST['login']);
if ($res and password_verify(password_hash($_POST['password']), $res['password'])) {
$msg = 'Найдено';
} else {
query('insert into users set login = ?, password = ?', [$_POST['login'], password_hash($_POST['password'], PASSWORD_BCRYPT)]);
$msg = 'Ошибка';
}
}
Mobiaaa,

if (isset($_POST['send'])) {
$res = assoc('select * from users where login = ?', [$_POST['login']]);
if ($res and password_verify($_POST['password'], $res['password'])) {
$msg = 'Найдено';
} else {
query('insert into users set login = ?, password = ?', [$_POST['login'], password_hash($_POST['password'], PASSWORD_BCRYPT)]);
$msg = 'Ошибка';
}
}


Найдено :-)

спс
Онлайн: 2
Время:
Gen. 0.1096
(c) Bym.Guru 2010-2025