PHP/MySQL | password_hash()
Тема закрыта by
DELETED
Причина: решён
Причина: решён
DELETED
Автор
30 октября 2016, в 18:05
Delete
shadrvlad (30.10.2016 в 17:59)
Вилы_Выкидные, если не менял соль принудительно то все должно работать
Вилы_Выкидные, если не менял соль принудительно то все должно работать
пост 10
Вилы_Выкидные (30.10.2016 в 18:00)
вот шифруем и пишем в базу (каждый раз разный хеш на один и тот же вводимый пароль почему-то, как же потом сравнивать)
вот шифруем и пишем в базу (каждый раз разный хеш на один и тот же вводимый пароль почему-то, как же потом сравнивать)
Выше отвечал :)
Каждый вызов функции генерирует новую соль, которая потом отображается в конечном хеше
Поэтому хеш всегда будет каждый раз новый
А вот почему false проверка вызывает, нужно разбираться
Например в пароле были/ввели пробел случайно или же не извлекаются данные из базы
DELETED
Автор
30 октября 2016, в 18:32
Delete
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
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], $_POST['password']]);
А в insert пишете уже шифрованный
Вы разные данные сверяете
________
посл. ред. 30.10.2016 в 18:35; всего 1 раз(а); by Mobiaaa
DELETED
Автор
30 октября 2016, в 18:37
Delete
Mobiaaa (30.10.2016 в 18:35)
Вилы_Выкидные, Вы в базе ищите "чистый" пароль
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], $_POST['password']]);
А в insert пишете уже шифрованный
Вы разные данные сверяете
Вилы_Выкидные, Вы в базе ищите "чистый" пароль
$res = assoc('select * from users where login = ? and password = ?', [$_POST['login'], $_POST['password']]);
А в insert пишете уже шифрованный
Вы разные данные сверяете
ну так хеш первый раз пишется в базу а потом выводится через $res Для сравнения в verify_password
DELETED
Автор
30 октября 2016, в 18:39
Delete
Вилы_Выкидные, условие select никогда не выполнится
Цепочка действий скрипта + юзер
1) В базе нет данных о юзере
2) В базу пишем логин + хеш
3) При проверке сверяем логин + пароль (а там то у нас не пароль а хеш)
Следовательно первый запрос никогда не выполнится
Решение:
С select убрать проверку пароля, оставив только логин (она идёт ниже в условии password_verify)
Цепочка действий скрипта + юзер
1) В базе нет данных о юзере
2) В базу пишем логин + хеш
3) При проверке сверяем логин + пароль (а там то у нас не пароль а хеш)
Следовательно первый запрос никогда не выполнится
Решение:
С select убрать проверку пароля, оставив только логин (она идёт ниже в условии password_verify)
DELETED
Автор
30 октября 2016, в 18:46
Delete
Mobiaaa (30.10.2016 в 18:40)
Вилы_Выкидные, условие select никогда не выполнится
Цепочка действий скрипта + юзер
1) В базе нет данных о юзере
2) В базу пишем логин + хеш
3) При проверке сверяем логин + пароль (а там то у нас не пароль а хеш)
Следовательно первый запрос никогда не выполнится
Решение:
С select убрать проверку пароля, оставив только логин (она идёт ниже в условии password_verify)
Вилы_Выкидные, условие 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 = 'Ошибка';
}
}
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 = 'Ошибка';
}
}
DELETED
Автор
30 октября 2016, в 18:54
Delete
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 = 'Ошибка';
}
}
Найдено
спс
Стр.: 1, 2