Выскакивает сообщение: Неверный логин или пароль
Господа!
Есть система регистрации и авторизации на новом проекте. Регистрация работает, данные добавляются в базу и всё отлично. А вот с авторизацией проблема, которая заключается в том, что постоянно выходит сообщение: НЕ ВЕРНЫЙ ЛОГИН ИЛИ ПАРОЛЬ, даже когда логин и пароль верный. Два дня ищу проблему и буду очень рад помощи.
Ниже код обработчика форм регистрации и авторизации, оба они заключены в модули как видно в коде. Сообщения выводятся функцией MessageSend с параметрами. И перебирая код заметил то, что когда удаляешь из кода вывод сообщения 34 строки, то авторизация срабатывает и всё нормально, НО...когда отсутствует часть кода в строке 34: MessageSend(1, 'Неверный логин или пароль'), то залогониться пользователь может под любым паролем набранным от "балды".
В чём может быть проблема?
<?
ULogin(0);
if ($Module == 'register' and $_POST['enter']) {
$_POST['login'] = FormChars($_POST['login']);
$_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);
//$_POST['password'] = FormChars($_POST['password']);
$_POST['name'] = FormChars($_POST['name']);
$_POST['captcha'] = FormChars($_POST['captcha']);
if (!$_POST['login'] or !$_POST['name'] or !$_POST['password'] or !$_POST['captcha']) MessageSend(1, 'Невозможно обработать форму.');
if ($_SESSION['captcha'] != md5($_POST['captcha'])) MessageSend(1, 'Неверный код с картинки');
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `login` FROM `users` WHERE `login` = '$_POST[login]'"));
if ($Row['login']) MessageSend(3, 'Логин <b>'.$_POST['login'].'</b> уже используется.');
mysqli_query($CONNECT, "INSERT INTO `users` VALUES (NULL, '$_POST[login]', '$_POST[name]', '$_POST[password]', NOW())");
MessageSend(3, 'Регистрация акаунта успешно завершена');
}
else if ($Module == 'login' and $_POST['enter']) {
$_POST['login'] = FormChars($_POST['login']);
//$_POST['password'] = FormChars($_POST['password']);
$_POST['password'] = GenPass(FormChars($_POST['password']), $_POST['login']);
$_POST['captcha'] = FormChars($_POST['captcha']);
if (!$_POST['login'] or !$_POST['password'] or !$_POST['captcha']) MessageSend(1, 'Невозможно обработать форму.');
if ($_SESSION['captcha'] != md5($_POST['captcha'])) MessageSend(1, 'Капча введена не верно.');
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `password` FROM `users` WHERE `login` = '$_POST[login]'"));
if ($Row['password'] != $_POST['password']) MessageSend(1, 'Неверный логин или пароль');
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, "SELECT `id`, `name`, `regdate` FROM `users` WHERE `login` = '$_POST[login]'"));
$_SESSION['USER_ID'] = $Row['id'];
$_SESSION['USER_NAME'] = $Row['name'];
$_SESSION['USER_REGDATE'] = $Row['regdate'];
$_SESSION['USER_LOGIN_IN'] = 1;
exit(header('Location: /'));
}
?>
Далее код функций GenPass и FormChars вместе с моими комментариями:
//ниже функция FormChars помогает обработать формы, произвести её валидацию. Защита от скриптов хаккеров.
//nl2br - вставляет отступы между символами чужого скрипта, htmlspecialchars - заменяет введённые теги на простые символы преобразуя введённый хаккерский код который тупо потеряет свой функционал, trim - удалит все пробелы.
//Данная функция работает в обработчиках форм
function FormChars ($p1) {
return nl2br(htmlspecialchars(trim($p1), ENT_QUOTES), false);
}
//Данная функция зашифрует пароль в md5 и вставит в него дополнительные символы
//Данная функция работает в обработчиках форм
function GenPass ($p1, $p2) {
return md5('blablabla'.md5('321'.$p1.'123').md5('678'.$p2.'890'));
}
Ответы (1 шт):
В общем, регистрацию взять отсюда. И вообще внимательно прочесть вчё что там написано.
А авторизацию сделать примерно так
if ($Module == 'login' and isset($_POST['enter']))
{
if (!$_POST['login'] or !$_POST['password'] or !$_POST['captcha']) {
MessageSend(1, 'Невозможно обработать форму.');
}
if ($_SESSION['captcha'] != md5($_POST['captcha'])) {
MessageSend(1, 'Капча введена не верно.');
}
$stmt = $conn->prepare("SELECT * FROM users WHERE login=?");
$stmt->bind_param("s", $login, $email);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
if ($user && password_verify($_POST['pass'], $user['pass']))
{
$_SESSION['user'] = $user;
header('Location: /');
exit();
} else {
MessageSend(1, 'Неверный логин или пароль');
}
}