Помогите настроить аутентификацию JWT

270
17 января 2018, 17:52

Есть index.html Там инпуты: логин, пароль и почта. Две кнопки регистрация и Вход на сайт. Далее перемещаемся в файл save_user.php, где обработка этих двух кнопок формы: 1) Регистрация. Проверка введенного, если всё соответствует, то заносим в базу + отсылаем письмо с GET адресом для активации. Далее с почты заходим на activate.php+Get. Активация прошла успешно и можем с index.html попадать на сайт с помощью логина и пароля. 2) Вход на сайт. Проверяем чтобы логин и пароль были, сверяем с базой. Если совпало зашли на сайт. там только одна кнопка "показать мои данные и редактировать их". При нажатии кнопки загружается info_user.php, где три инпута: логин, пароль и почта с уже данными этого пользователя + кнопка "исправить". Он их правит, жмет кнопку и попадает на correct.php, где данные проверяются и вносятся в базу. ОЧЕНЬ ПЛИЗ НУЖНО ПОМОЧЬ расставить аутентификацию JWT: 1) при переходе на activate.php+Get посетителю отдается ключ JWT. 2) при входе на сайт по логину и паролю посетителю отдается ключ JWT. 3) при загрузке info_user.php от посетителя передается ключ JWT. 4) при нажатии кнопки "исправить" от посетителя передается ключ JWT.

index.html:

<html> 
	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
	<head> 
	    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
		<title>Регистрация</title> 
	</head> 
 
	<body> 
	    <form action="save_user.php" method="post"> 
			<label>Введите логин (только лат.буквы, цифры и подчеркивание до 15 знаков): <input type="text"              size="15" maxlength="15" name="lg" id="lg"></label><br><br> 
			<label>Пароль (только лат.буквы, цифры и подчеркивание до 15 знаков): <input type="password"                size="15" maxlength="15" name="ps" id="ps"></label><br><br> 
			<label>Почта (до 30 знаков): <input type="text" size="30" maxlength="30" name="email" id="email"></label><br><br> 
			<input type="submit" name="register" id="register" value="Зарегистрироваться"> 
			<input type="submit" name="enter" id="enter" value="Войти на сайт"> 
		</form> 
	</body> 
</html>

save_user.php:

<?php 
    header("Content-Type: text/html; charset=utf-8");  
    if (isset($_POST['lg'])) 
	{ 
		$lg = $_POST['lg']; 
		if ($lg == '') unset($lg); 
	} 
	if (isset($_POST['ps'])) 
	{ 
		$ps=$_POST['ps']; 
		if ($ps =='') unset($ps); 
	} 
	if (isset($_POST['email'])) 
	{ 
		$email=$_POST['email']; 
		if ($email =='') unset($email); 
	} 
    if (empty($lg) or empty($ps)) exit ("Вы не ввели логин или пароль, вернитесь назад и заполните все поля!"); 
    require_once 'bd.php'; // здесь лежат переменные для подключения к базе данных $host, $user, $pswd, $database 
     
     
     
    if($_POST['register']) 
    { 
        if (empty($email)) exit ("Вы не ввели адрес почты, вернитесь назад и заполните все поля!"); 
    	else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) exit ("Вы некорректно ввели электронную почту!"); 
    	else if (!preg_match('/[A-Za-z_0-9]+/', $lg)) exit ("Вы некорректно ввели логин!"); 
    	else if (!preg_match('/[A-Za-z_0-9]+/', $ps)) exit ("Вы некорректно ввели пароль!"); 
    	else 
    	{ 
    		 
    		$result = mysqli_connect($host, $user, $pswd, $database) or die("Не могу соединиться с базой."); 
    		 
    		$qty1 = 0; 
    		$result1 = mysqli_query($result, "SELECT user_lg FROM `user` WHERE user_lg = '$lg'") or die("Не могу сделать поиск по логину в базе"); 
    		$qty1 = mysqli_num_rows($result1);  //получаем количество результатов поиска 
    		if($qty1 > 0) {mysqli_close($result); exit ("Логин уже существует в базе, выберите другой!");} 
    		 
    		$qty2 = 0; 
    		$result2 = mysqli_query($result, "SELECT user_email FROM `user` WHERE user_email = '$email'") or die("Не могу сделать поиск по почте в базе");   // LIMIT1 
    		$qty2 = mysqli_num_rows($result2);  //получаем количество результатов поиска 
    		if($qty2 > 0) {mysqli_close($result); exit ("Почтовый адрес уже существует в базе, выберите другой!");} 
    		 
    		if($qty1 == 0 and $qty2 == 0) 
    		{ 
    		    $from = "admin@xxx.com"; 
    					 
        		$arr = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','x','y','z', 
        					 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','R','S','T','U','V','X','Y','Z', 
        					 '1','2','3','4','5','6','7','8','9','0'); 
        					  
        		$hash_code = ""; 
        		for($i=1;$i<31;$i++) $hash_code = $hash_code .  $arr[rand(0, 58)]; 
        		 
        		$subject = "Подтверждение регистрации"; 
        		$message = "Вы хотели зарегистрироваться на сайте: xxx.com" .  
        					". Ваш логин: " . $lg .  
        					". Ваш пароль: " . $ps .  
        					". Для окончательной регистрации перейдите по этой ссылке:" . 
        					"https://xxx/activate.php?hash=" . $hash_code; 
        		if (!mail($email, $subject, $message, 'From: ' . $from)) 
        		{ 
        			$conclusion = "МЫ не смогли отправить Вам письмо. Начните регичтрацию сначало."; 
        		} 
        		else 
        		{ 
        		    $result3 = mysqli_query($result, "INSERT INTO `user`(user_lg, user_ps, user_email, user_hash) VALUES ('$lg', '$ps','$email','$hash_code')"); 
    	    	    mysqli_close($result); 
    	    	    if($result3) echo "НА ВАШУ ПОЧТУ ОТПРАВЛЕНО ПИСЬМО.<br> 
        		          ДЛЯ ЗАВЕРШЕНИЯ РЕГИСТРАЦИИ ПЕРЕЙДИТЕ В СВОЙ ПОЧТОВЫЙ ЯЩИК,<br> 
        		          ОТКРОЙТЕ НАШЕ ПИСЬМО И ПЕРЕЙДИТЕ ПО ССЫЛКЕ В ЭТОМ ПИСЬМЕ."; 
    	    	} 
    		} 
    	} 
    } 
     
    else if ($_POST['enter']) 
    { 
        $result = mysqli_connect($host, $user, $pswd, $database) or die("Не могу соединиться с базой."); 
    		 
		$qty3 = 0; 
		$result1 = mysqli_query($result, "SELECT * FROM `user` WHERE user_lg = '$lg' AND user_ps = '$ps'") or die("Не могу сделать поиск по логину в базе"); 
		$qty3 = mysqli_num_rows($result1);  //получаем количество результатов поиска 
		if($qty3 > 0) 
		{ 
		    $rows = mysqli_fetch_assoc($result1); 
		    if ($rows["user_hash"] == "") 
		    { 
		        echo "Вы вошли на сайт!"; 
    		    echo ' 
    		        <html> 
                    	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
                    	<head> 
                    	    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
                    		<title>Получение информации</title> 
                    	</head> 
                     
                    	<body> 
                    	    <form action="info_user.php" method="post"> 
                    	        <input type="submit" name="giveMi" id="giveMi" value="Получить и редактировать данные"> 
                    		</form> 
                    	</body> 
                    </html> 
    		    '; 
		    } 
		    else exit ("Вы не активировали свою регистрацию. Зайдите на указанную Вами почту и перейдите по ссылке в нашем письме."); 
		} 
		else {mysqli_close($result); exit ("Такой логина или пароля не существует в базе!");} 
	} 
?>

activate.php:

<?php 
    header("Content-Type: text/html; charset=utf-8");  
	 
	require_once 'bd.php'; 
	$hash = $_GET['hash']; 
	if (preg_match('/[^A-Za-zА-Яа-я0-9]/', $hash) === TRUE) $hash = 0; 
	$qty = -1; 
	 
	$result = mysqli_connect($host, $user, $pswd, $database) or die("Не могу соединиться с mysqli."); 
	 
	$result1 = mysqli_query($result, "SELECT * FROM `user` WHERE user_hash='$hash' LIMIT 1"); 
	$qty = mysqli_num_rows($result1); 
	 
	if($qty > 0) 
	{ 
		$result2 = mysqli_query($result, "UPDATE `user` SET user_hash = '' WHERE user_hash = '$hash'") or die("Не могу сделать поиск по коду в базе"); 
		if($result2) $message = "Ваша учетная запись активирована."; 
		else $message = "Ваша учетная запись не активирована. Попробуйте перейти по ссылке еще раз."; 
	} 
	else 
	{ 
		$message = "Ваша учетная запись не активирована. Попробуйте перейти по ссылке еще раз."; 
	} 
	 
	mysqli_close($result); 
	echo $message; 
?>

info_user.php (как-то по ключу передаются данные: логин, пароль, почта):

<?php 
    echo ' 
        <html> 
        	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
        	<head> 
        	    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
        		<title>Регистрация</title> 
        	</head> 
         
        	<body> 
        	    <form action="correction.php" method="post"> 
        			<label>Введите логин (только лат.буквы, цифры и подчеркивание до 15 знаков): <input type="text" size="15" maxlength="15" name="lg" id="lg" value="' . $lg . '"></label><br><br> 
        			<label>Пароль (только лат.буквы, цифры и подчеркивание до 15 знаков): <input type="password" size="15" maxlength="15" name="ps" id="ps" value="' . $ps . '"></label><br><br> 
        			<label>Почта (до 30 знаков): <input type="text" size="30" maxlength="30" name="email" id="email" value="' . $email . '"></label><br><br> 
        			<input type="submit" name="correct" id="correct" value="Исправить"> 
        		</form> 
        	</body> 
        </html> 
    '; 
     
?>

correction.php:

<?php 
    header("Content-Type: text/html; charset=utf-8");  
    if (isset($_POST['lg'])) 
	{ 
		$lg = $_POST['lg']; 
		if ($lg == '') unset($lg); 
	} 
	if (isset($_POST['ps'])) 
	{ 
		$ps=$_POST['ps']; 
		if ($ps =='') unset($ps); 
	} 
	if (isset($_POST['email'])) 
	{ 
		$email=$_POST['email']; 
		if ($email =='') unset($email); 
	} 
    if (empty($lg) or empty($ps) or empty($email)) exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); 
    else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) exit ("Вы некорректно ввели электронную почту!"); 
	else if (!preg_match('/[A-Za-z_0-9]+/', $lg)) exit ("Вы некорректно ввели логин!"); 
	else if (!preg_match('/[A-Za-z_0-9]+/', $ps)) exit ("Вы некорректно ввели пароль!"); 
	else 
	{ 
		require_once 'bd.php'; // здесь лежат переменные для подключения к базе данных $host, $user, $pswd, $database 
		$result = mysqli_connect($host, $user, $pswd, $database) or die("Не могу соединиться с базой."); 
		 
		$qty1 = 0; 
		$result1 = mysqli_query($result, "SELECT user_lg FROM `user` WHERE user_lg = '$lg' LIMIT 1") or die("Не могу сделать поиск по логину в базе"); 
		if($result1) $qty1 = mysqli_num_rows($result1);  //получаем количество результатов поиска 
		if($qty1 > 0) {mysqli_close($result); exit ("Логин уже существует в базе, выберите другой!");} 
		 
		$qty2 = 0; 
		$result2 = mysqli_query($result, "SELECT user_email FROM `user` WHERE user_email = '$email' LIMIT 1") or die("Не могу сделать поиск по почте в базе"); 
		if($result2) $qty2 = mysqli_num_rows($result2);  //получаем количество результатов поиска 
		if($qty2 > 0) {mysqli_close($result); exit ("Почтовый адрес уже существует в базе, выберите другой!");} 
		 
		if($qty1 == 0 and $qty2 == 0) 
		{ 
		    $result3 = mysqli_query($result, "INSERT INTO `user`(user_lg, user_ps, user_email) VALUES ('$lg', '$ps','$email')"); 
    		if($result3)  echo "Вы успешно усправили регистрационные данные!"; 
	    	mysqli_close($result); 
	    } 
	} 
?>

В интернете мало примеров. В основном теория. Пример на franework раздутый и не рабочий. Дней пять боролся сам, теперь ищу помощи.

READ ALSO
Найти и проставить id родителей

Найти и проставить id родителей

ЗдравствуйтеИмеется таблица вида:

185
Однотипные блоки php

Однотипные блоки php

Небольшой сайт 5 страницФутер хедер одинаковые

202
Ошибка HP Parse error: syntax error, unexpected &#39;[&#39; in

Ошибка HP Parse error: syntax error, unexpected '[' in

При запуске скрипта crontab ругается на функцию, которая приведена нижеВыдает ошибку -

181
Отправка POST запроса через планировщик

Отправка POST запроса через планировщик

Добрый деньЕсть HTML код

245