@iiideb
Пишу роботов на html

Почему не проходит авторизация?

На сайте не проходит авторизация, в то время, как при регистрации все данные записываются в бд без проблем
Форма:
<div class="col-md-8 mb-3">
			Авторизация
			<form>
				<label>Login</label>
				<input type="text" name="login" class="form-control col-md-6" id="login">
				<label>Password</label>
				<input type="password" name="password" class="form-control col-md-6" id="password">
				<div class="alert alert-danger mt-4 col-md-6" id="errorBlock" style="display: none"></div>
				<button class="btn btn-success mt-2" id="auth_user">Войти</button>
			</form>
		</div>

Ajax запрос:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>



<script>
	$('#auth_user').click(function(){
		var login = $('#login').val();
		var password = $('#password').val();
		$.ajax({
			url: 'ajax/auth.php',
			type: 'POST',
			cache: false,
			data: {'login':login, 'password':password},
			dataType: 'html',
			success: function(data){
				if(data == 'Готово'){
					$('#auth_user').text('Готово');
					$('#errorBlock').hide();
					document.location.reload(true);
				}
				else {
					$('#errorBlock').show();
					$('#errorBlock').text(data);
				}
			}
		});
	});
</script>

auth.php:
<?php

	$login = trim(filter_var($_POST['login'], FILTER_SANITIZE_STRING));
	$password = trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));


	$hash = "3h#%89*H#($h%!~fh";
	$password = md5($password.$hash);

	require_once "../sqlconnect.php"; #Подключение к бд через pdo
	
	$sql = 'SELECT `id` FROM `userinfo` WHERE `login` = :login && `password` = :password';
	$query = $pdo->prepare($sql);
	$query->execute(['login' => $login, 'password' => $password]);

	$user = $query->fetch(PDO::FETCH_OBJ);
	if ($user->id == 0) {
		echo 'Такого пользователя не существует';
	}
	else{
		setcookie('log', $login, time() + 3600*24, '/');
		echo "Готово";
	}

	echo 'Готово';

?>

sqlconnect.php:
<?php
	$user = 'root';
	$pass = '';
	$db = 'users';
	$host = 'localhost';

	$dsn = 'mysql:host='.$host.';dbname='.$db;
	$pdo = new PDO($dsn, $user, $pass);
	
?>
  • Вопрос задан
  • 407 просмотров
Пригласить эксперта
Ответы на вопрос 1
@marsdenden
Рискну предположить, что куки, которые выставляет auth.php при ajax запросе браузером не воспринимаются и в локальное хранилище не записываются. Поэтому запрос авторизации в варианте с куками делается по старинке - через form-submit, когда в ответ прилетает не результат ajax, а полноценный html, вместе с которым приходит и нужная кука.
Ищите способ сохранить куку в браузере по результату выполнения скрипта. В консоли разработчика можно ее увидеть на вкладке Network при просмотре ajax запроса. Для начала неплохо бы почитать здесь, потом начинать изучать какой-нибудь JS-фреймворк, мне понравился vue.js, достаточно низкий порог входа, весьма логичен. Со временем понимаешь, что на jquery далеко не уедешь, так что переход к фреймворку - вопрос времени
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы