React.js: собираем с нуля изоморфное / универсальное приложение. часть 3: добавляем авторизацию и обмен данными с api
Содержание:
- Алгоритм регистрации
- Ошибка авторизации
- Запомнить пользователя
- 4.3. Очищаем пользовательские данные из глобального состояния
- 5. Бонус: Server-Side API Requests
- 6. Вместо заключения
- Регистрация
- Формы авторизации и регистрации
- Creating the Login and Registration Forms
- Cookies
- Авторизация на базе данных.
- Описание авторизации
- Автоматическая авторизация на куках.
- Виды режимов авторизации
- Форма авторизации
- Что документируется в разделе аутентификации
- 3.2. Добавляем авторизацию
- Login Immediately with your account on:
- Кнопка ВЫЙТИ
- Авторизация
- Создание API для входа пользователей
- Вывод:
- Итоги
Алгоритм регистрации
Для создания нового пользователя используется метод , который принимает логин и пароль в качестве аргументов.
Если пользователь существует — выбрасываем исключение. Иначе, генерируем новую соль и хешируем ей пароль. После этого выполняем запрос на добавление данных в базу. Если при выполнении запроса происходит ошибка, печатаем соответствуюее сообщение и завершаем работу скрипта. Такая ситуация может произойти при отключении сервера MySQL или его внутренней ошибки.
Если пользователь был усшешно создан, функция возвращает его уникальный идентификатор. Это обычное числовое поле, которое автоматически увеличивается при добавлении записей в таблицу.
Ошибка авторизации
Ошибка авторизации – неверное введение логина, пароля и других данных
При наборе кодовых слов, пользователь должен обращать внимание на правильный порядок символов, регистр, установленную раскладку клавиатуры. При ошибке авторизации система блокирует посетителя доступ к системе и может производить такие действия:
- фиксацию факта несанкционированного доступа;
- подачу звукового или светового сигнала, выдачу сообщения на экран;
- ограничение доступа на определенное время;
- предложение повторного набор кода;
- восстановление пароля;
- блокирование банковской кредитной карты, пропуска.
Запомнить пользователя
Теперь нам надо запомнить что пользователь авторизован и точно знать кто это. Первое что приходит в голову — использовать для этого куки. Действительно — запихать в куки логин и id пользователя и всегда знать кто запрашивает страницу в данный момент.
Но это порочная практика. Почему? Потому что куки — это файл, который хранится у пользователя в браузере и данные из этого файла передаются серверу в каждом запросе. Во-первых, они передаются как текст, а это значит — их легко перехватить. Во-вторых, это простой текст, посылаемый пользователем. Поэтому его можно буквально переписать. Например, если мы решили хранить в куках логин пользователя «Вася» он может открыть управление куками в своем браузере, найти нужную куку и исправить ее на, скажем, «Admin». И все. Теперь при каждом запросе мы будем получать куку, которая нам будет сообщять юзернейм пользователя — «Admin».
Поэтому безопаснее хранить все данные на сервере в недоступном из веба месте. В какой-то папке, к которой нельзя получить доступ из браузера. В эту папку нужно писать все данные о пользователе и читать их оттуда каждый раз, когда он запрашивает документ. Чтобы узнать какому пользователю принадлежит какой файл данных — надо обзывать файл уникальным именем и вот это имя кидать уже пользователю в куки. Таким образом, пользователь не сможет узнать как называется файл для пользователя Admin — этот файл генерирует система на сервере. И это позволяет таскать от документа к документу хоть пароли в открытом виде.
То что я описал — это механизм сессии. В Perl, например, для использования сессий нужно загружать модули. А в php сессии поддерживаются из коробки. Фактически, все что вам нужно знать — это функция session_start() и массив $_SESSION. Это все. Сейчас расскажу.
В каждом скрипте, где вы будете писать в сессию или читать из нее, вам надо до того, как вы выведете какую-то информацию вызвать функцию session_start(). Это запустит сессию. Эта функция создаст файл сессии если его нет или прочитает его если скрипту была передана специальная кука.
Чтобы записать в сессию данные нужно просто записать их в массив $_SESSION. Сейчас нам надо помнить id юзера.
Все. Теперь каждый раз когда пользователь будет запрашивать скрипт, который использует сессии — вам будет доступно значение элемента $_SESSION.
Поэтому когда пользователь ввел логин и пароль, мы получили его данные из БД, что подтверждает что такой пользователь есть в нашей базе данных, мы запоминаем его в сессии.
4.3. Очищаем пользовательские данные из глобального состояния
src/redux/reducers/timeReducer.js
Если поступит action SIGN_OUT, то все данные редьюсера timeReducer будут заменены на initialState, то есть на значения по умолчанию. Этот же прием необходимо реализовать для всех других редьюсеров, которые содержат пользовательские данные.
5. Бонус: Server-Side API Requests
Библиотека redux-oauth поддерживает Server Side API requests, то есть в процессе рендеринга сервер может сам обратиться к API за данными. Это имеет множество преимуществ:
- сервер находится гораздо ближе к API, а значит пользователь получит доступ к контенту быстрее;
- для некачественного мобильного интернета уменьшение количества запросов имеет решающее значение в вопросах производительности из-за большого latency каждого запроса;
- поисковики не умеют или плохо умеют JavaScript, а значит иначе они не получат доступ к полноценному контенту.
Примечание: да, поисковики не будут авторизовываться, но некоторые сервисы API смогут возвращать данные и для неавторизованных пользователей с некоторыми ограничениями. redux-oauth подойдет и для таких сценариев.
Реализуем небольшой Proof of Concept.
Добавим запрос к API в серверную часть нашего приложения
src/server.js
После того, как функция initialize из redux-oauth обратится к backend, проверит авторизационный токен и получит данные о пользователе, мы выполним запрос timeRequest на стороне сервера. После его выполнения мы отрендерим контент и отдадим ответ пользователю.
Откроем браузер, авторизуемся при необходимости, перейдем на страницу «Время» и нажмем F5. Мы должны увидеть timestamp, хотя кнопку «Запросить» никто не нажимал. Если открыть Dev Tools браузера, вкладку Network и повторить эксперимент, то мы увидим, что запроса к API из клиента не было. Это подтверждает, что вся работа была сделана на стороне сервера.
Внесем последнее небольшое улучшение в наш проект: будем делать запрос к API только в том случае, если пользователь авторизован.
src/redux/actions/timeActions.js
Как мы видим, внутри возвращаемой функции мы можем получить доступ к актуальному глобальному состоянию посредством вызова функции getState, которая будет передана вторым аргументом. Об этом далеко не все знают, а это очень полезная возможность.
6. Вместо заключения
Вот и подошел к концу цикл статей о веб-приложении на React.js с нуля. Искренне надеюсь, что он был вам полезен!
Ссылка на проект на github — https://github.com/yury-dymov/habr-app/tree/v3
P.s. Если в тексте присутствуют ошибки или неточности, пожалуйста, напишите мне сначала в личные сообщения. Заранее спасибо!
Регистрация
Регистрационные данные пользователей мы будем записывать в таблицу users.
Если у Вас ещё нет такой таблицы, то создайте её. В ней должны быть поля id,
login и pas. Другие поля мы не будем использовать.
Если они есть в таблице, то они будут оставаться пустыми.
Форма авторизации отправляет данные в файл registration.php. Расположим его в той же папке, где находится
страница. Код скрипта будет такой:
registration.php:
+
12 |
<?php header('Content-type: text/html; charset=utf-8'); |
345678910 |
$login=$_POST; $pas=$_POST; $db=mysqli_connect('localhost', 'root', '', 'mybase'); $query="INSERT INTO users (login, pas) VALUES ('$login', '$pas')"; $result=mysqli_query($db, $query); if ($result) header("Location: formreg.php"); mysqli_close($db); |
В строке 9 мы устанавливаем возврат к странице с формами. Так как на локальном сервере выполнение скрипта и
повторная загрузка страницы происходит очень быстро, то визуально это будет выглядеть так, как будто при нажатии
кнопки «Зарегистрироваться», ничего не происходит. На реальных сайтах обычно делают переход на
специальную страницу с информацией о том, что пользователь зарегистрирован и регисрационными
данными. Попробуйте выполнить регистрацию и посмотрите, появляются ли в базе данных новые записи.
Формы авторизации и регистрации
Форма авторизации обычно располагается на главной странице, либо она может быть на всех страницах сайта. Для
формы регистрации, в основном, создаётся отдельная страница. Мы создадим всего одну страницу, на которой будут
обе формы, и на неё же будут выводиться данные пользователя. Пока на ней будет только HTML код, но мы сразу
сделаем PHP файл, потому что в дальнейшем это будет скрипт. Назовём его formreg.php.
Код страницы будет такой:
formreg.php:
12345678910 111213141516171819202122 |
<?php header('Content-type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title>Страница</title> <meta charset="utf-8"> </head> <body> <p>Авторизация:</p> <form action="authorization.php" method="post"> <input name="login" placeholder="Логин"> <input type="password" name="password" placeholder="Пароль"> <input type="submit" value="Войти"> </form> <p>Регистрация:</p> <form action="registration.php" method="post"> <input name="login" placeholder="Логин"> <input type="password" name="password" placeholder="Пароль"> <input type="submit" value="Зарегистрароваться"> </form> </body> </html> |
Creating the Login and Registration Forms
Coding the Registration Form
Here is the HTML for creating the registration form. You have to put it in a file named register.php.
You can read the tutorial titled Form Input Validation Using Only HTML5 and Regex if you want to learn more about the topic. You can also take client-side form validation to the next level with jQuery by getting more power over the error messages that are shown and their placement and appearance. If you want to learn more about client-side validation, check out those posts.
Style the Forms With CSS
Here is some CSS that you can apply to these forms:
This contains some additional styling rules for error messages and headings. The HTML and CSS from this section can be used as the basis of your project when you create your own forms, which might require different styling and input fields.
Cookies
Cookies (в дальнейшем просто «куки») — небольшие фрагменты данных, которые веб-сервер отправляет браузеру.
Браузер сохраняет их у себя, а при следующем посещении веб-страницы отправляет обратно. Благодаря этому, веб-сервер сможет узнать своего «старого» посетитеиля, идентифицировать его.
С технической стороны, куки — это обычные HTTP заголовки.
Когда веб-сервер хочет записать куку в браузер пользователя, он отсылает специальный заголовок ответа с названием . В этом заголовке должна содержаться необходимая информация и дополнительные аттрибуты, о которых пойдёт речь далее.
В следующий раз, когда браузер пользователя запросит веб-страницу с того же сайта, в числе прочих заголовков он передаст заголовок запроса . Веб-сервер получит эту информацию, и она будет доступна также и для PHP.
Являясь серверным языком программирования, PHP может управлять заголовками, которые отправляет сервер, а значит может устанавливать и читать куки.
Чтобы добавить новую куку, необходимо вначале определиться со следующими критериями:
- Название этой куки (может состоять только из символов латинского алфавита и цифр);
- Значение, которое предполагается хранить;
- Срок жизни куки — это обязательное условие.
За установку куки в PHP отвечает функция , ей нужно передать как минимум три параметра, описанных выше. Пример:
Обратите внимание, что срок жизни указывается в относительной величине. В этом примере кука будет существовать ровно 30 дней с момента установки
Как прочитать куки
В PHP максимально упрощён процесс чтения информации из кукисов. Все переданные сервером куки становятся автоматически доступны в специальном глобальном массиве
Так, чтобы получить содержимое куки с именем «visit_count», достаточно обратиться к одноимённому элементу массива , например вот так:
Обратите внимание: установив в сценарии куку через , прочитать её можно будет только при следующем посещении страницы
Собираем всё вместе
Теперь, научившись устанавливать и читать куки, напишем полноценный сценарий, который будет считать и выводить количество посещений страницы пользователем:
Авторизация на базе данных.
Чем отличается выше приведена авторизация от авторизации на базе данных!?
Одним → хранением и обработкой данных.
Если у вас данные хранятся в базе данных, то нужно их сопоставить с теми, что только что ввел пользователь.
post запрос с формойЕще о базах данных
<?php
$login=$_POST;
$pass=md5($_POST);
include(«connect.php»);
mysql_select_db(«XXX», $conn);
$sql = «SELECT id FROM user WHERE user_loginname=’$login’ and user_password=’$pass'»;
$result = mysql_query($sql);
if (mysql_num_rows($result)>0)
{
echo(«больше 0»);
}
else
{
exit(«фуфло»);
}
?>
Отлично! Пароль и логин найдены, что дальше!?
сессию
$_SESSION = «здесь данные»;
Ну или если отталкиваться от выше приведенного кода:
$_SESSION = $login;
Описание авторизации
Открываем скачанный архив, и по строчкам можно посмотреть, как работает данная авторизация!
Давайте напишем программу, живой пример авторизации прямо сейчас! Прямой здесь! Специально засеку, сколько времени мне потребуется написать живой пример! С формой отправки данный, авторизацией и удалением авторизации!
Всё по пунктам! погнали!
1).session_start();2).$the_name3).
<form method=»post»>
<input type=»text» name=»name_user» placeholder=»введите имя Вася»><br>
<input type=»submit» name=»avtoris» value=»Авторизоваться» >
4).Авторизоватьсяif($_POST)
5).6).elseif
Создаем сессию ($_SESSION//строка 11) , проверяем была ли создана сессия, а то мало ли… приветствуем пользователя. (строка 12)
7).8).Не удалось авторизоваться!9).10).BAD_example11).12).13).
Написал данную авторизацию… примерно за 1 час.
Автоматическая авторизация на куках.
Автоматическая авторизация на куках
Для того, чтобы произошла «автоматическая авторизация на куках», естественно… нужно установить эти самые куки(cookie). Обычно устанавливаются при авторизации, наверняка замечали такое — «запомнить меня» → пример
Как вы знаете, что если сессия существует, то вы авторизованы. Проходит некоторое количество времени(которое обусловлено временем жизни сессии), т.е. сессия не будет существовать вечно — она конечна. И после этого и сессия, и с нею авторизация, благополучно исчезают.
Но куки, можно установить хоть на 100 лет…
После того, как сессия убита, по каким-то причинам, нам требуется перезагрузить страницу, либо просто зайти… сюда же, ну, например завтра(когда авторизация уже не существует.)
Срабатывают куки по условию… «если куки существуют и одновременно не существует сессия, то запускаем сессию», с ками-то данными. Добавляем перезагрузку php -«Refresh» и чтобы код остановился применяем exit
Соберем весь код вместе:
if($_COOKIE and !$_SESSION)
{
$_SESSION= $_COOKIE;
header(«Refresh: 0»);
exit;
}
Естественно, что данный код должен стоять в самом начале сайта, после запуска сессии(сессия).
Виды режимов авторизации
Для удобства пользователей, для использования имеющейся в наличии аппаратуры и для обеспечения выполнения требований безопасности, созданы различные виды режимов авторизации. Часто используется комбинация нескольких таких режимов. Различают такие их типы:
- по способу доступа: онлайн и офлайн;
- по методу разграничения прав: дискреционное, мандатное, на основе ролей, контекста или решетки;
- по типу кода: логин-пароль, биометрическая, электронный ключ, IP-адрес, динамический пароль, уникальный предмет (пропуск. карта);
- по количеству проверок: одно- и многоступенчатая.
Форма авторизации
Помещение HTML-формы в PHP-скрипт
Поля формы авторизации создаются средствами языка разметки HTML, но нам необходимо поместить эту форму в PHP-скрипт, чтобы у нас была возможность работать с php-скриптами прямо в этой форме. Для этого форму заключим в php-скрипт, а выведем её на экраны средствами php, например,
<?php echo "<form id='forma' action='script1.php' method='post'> <h1>Форма входа</h1> <p>Заполните поля для входа на сайт</p> <p>Логин<br /><input type='text' name='login'></p> <p>Пароль<br /><input type='password' name='password'></p> <p><input type='submit' name='submit' value='Войти'> <br></p></form>" ?>
Что документируется в разделе аутентификации
В документации API не нужно подробно объяснять внешним пользователям, как работает аутентификация. Отсутствие объяснений внутренних процессов аутентификации, является лучшей практикой, поскольку хакерам будет сложнее злоупотреблять API.
Тем не менее нужно объяснить необходимую информацию:
- как получить API ключ;
- как пройти аутентификацию запроса;
- сообщения об ошибках, связанных с неверной аутентификацией;
- чувствительность информации аутентификации;
- период действия токена доступа (авторизации).
Если есть открытый и закрытый ключи, нужно объяснить, где следует использовать каждый ключ, и отметить, что закрытые ключи не должны использоваться совместно. Если разные уровни лицензий предоставляют разный доступ к вызовам API, эти уровни лицензирования должны быть явно указаны в разделе авторизации или в другом месте.
Поскольку раздел API ключей важен, и нужен разработчикам до того, как они начнут использовать API, этот раздел должен быть в начале руководства.
3.2. Добавляем авторизацию
Устанавливаем redux-oauth
Примечание: мы используем redux-oauth для изоморфного сценария, но она также поддерживает и client-side only. Примеры конфигурации для различных случаев и демо можно найти на сайте библиотеки.
Примечание 2: redux-oauth использует cookie для авторизации, так как механизм local storage не подходит для изоморфного сценария.
Активируем плагин cookieParser для express
src/server.js
Настраиваем redux-oauth для серверной части приложения
src/server.js
Здесь происходит много интересного:
Мы должны вызвать функцию initialize из redux-oauth, которой передадим текущий URL, cookies и конфигурацию: адрес API и используемые OAuth-провайдеры.
Если в переданных cookie будет найден авторизационный token, то библиотека проверит его валидность у backend и в случае успеха сохранит информацию о пользователе в глобальном состоянии
Обратите внимание, что дальнейший код приложения выполнится только после того, как отработает initialize.
Перед тем, как отправить HTML клиенту, мы используем метод res.cookie. Этот метод сообщает express, что к HTTP-ответу необходимо добавить заголовок SetCookie, в котором нужно передать обновленный авторизационный токен
Это очень важный шаг: новый авторизационный токен сохранится в cookie браузера сразу же после того, как он получит ответ от сервера. Тем самым мы гарантируем, что авторизация не сломается даже в случаях, когда клиентский JavaScript не успел скачаться, инициализироваться или выполнился с ошибкой.
Согласно документации, нам также необходимо добавить редьюсер redux-oauth в корневой редьюсер.
Login Immediately with your account on:
Comments:
39. questions — Dion Fitzgerald (2020-02-05 19:50)a few general questions… — 0 repliesRead the whole comment and replies
38. ty — IG Builder (2019-06-29 14:39)ty… — 0 repliesRead the whole comment and replies
37. Logout — Ye Lin Aung (2019-03-23 16:44)Logout does not die session… — 0 repliesRead the whole comment and replies
36. Nice code, secure login but insecure config — Shane Hollis (2019-02-24 07:30)Well written but there are a couple of missing security features… — 1 replyRead the whole comment and replies
34. Very Intimidating — Singh Priyanshu (2018-11-27 04:47)Intimidating… — 0 repliesRead the whole comment and replies
33. Interesting — Oliver Hanna (2018-10-27 18:01)PHP Secure Login Script 2018 and 2017… — 0 repliesRead the whole comment and replies
32. thanks — scott (2018-10-01 02:39)thanks bro… — 0 repliesRead the whole comment and replies
31. BT Mail Support — john carter (2018-09-27 06:10)registration failed… — 0 repliesRead the whole comment and replies
30. gmail support — emni petro (2018-08-21 06:02)resolve my gmail password issue… — 0 repliesRead the whole comment and replies
Кнопка ВЫЙТИ
Если пользователь авторизован и находится на сайте, обязательно нужно прописать кнопку «Выйти», при нажатии на которую должно происходить удаление, полное уничтожение данной сессии, чтобы никто не смог работать под ней больше до следующей авторизации. За удаление сессии отвечает встроенная (базовая) функция session_destroy();
В одном файле vhod.php у меня не получилось прописать функцию удаления сессии по клику, то бишь, по нажатию кнопки «Выйти», поэтому пришлось для работы кнопки ВЫЙТИ прописать для неё отдельный скрипт в отдельном файле close.php Для этого мы просто создаём html-форму с одной кнопкой «Выйти», в атрибуте action прописываем ссылку на обработчик этой кнопки, на файл close.php (пример выше уже был указан). А вот в файле-обработчике прописываем закрытие сессии по логину и дальнейшее её полное уничтожение. Пример:
unset($_SESSION);//закрытие сессии по логину session_destroy();//удаление сессии
Полностью файл close.php имеет такую структуру:
<?php session_start();//открытие сессии unset($_SESSION);//закрытие сессии по логину session_destroy();//удаление сессии header("Location: http://lora.in.ua/php-uroki/avtorizaciya/vhod.php");//Перенаправление на эту страницу после нажатия кнопки ВЫЙТИ ?>
Авторизация
Форма авторизации запускает на сервере файл authorization.php. Этот скрипт принимает логин и прароль и
проверяет, есть ли такой пользователь. Если есть, то логин будет записываться в сессию. Если такой пользователь
не найден, то в сессию будет записываться информация об этом. Это нужно для того, чтобы страница, которая
будет открыта после выполнения скрипта, получила эту информацию и вывела сообщение, что введён неправильный
логин или пароль. Код скрипта такой:
authorization.php:
345678910 11121314 |
session_start(); $login=$_POST; $pas=$_POST; $db=mysqli_connect('localhost', 'root', '', 'mybase'); $query="SELECT * FROM users WHERE login='$login' AND BINARY pas='$pas'"; $result=mysqli_query($db, $query); if (mysqli_num_rows($result)) $_SESSION=$login; else $_SESSION='er login'; header("Location: formreg.php"); mysqli_close($db); |
В строке 7 формируется запрос на выборку строки с логином и паролем, полученными из формы. Перед полем
pas написано ключевое слово BINARY. Оно нужно
для того, чтобы при сравнении по
этому полю учитывался регистр символов. Если нужно, чтобы регистр учитывался и при сравнении логина, то
BINARY нужно написать перед ним. В примере делается запрос на выборку всех полей. На практике можно делать
выборку только тех полей, данные из которых нужно будет выводить на страницу.
После получения результата, проверяется, найдена ли указанная запись. Если запись есть, то логин записывается
в сессию. Если пользователь не найден, то вместо
логина пишется строка «er login». Можно написать другой текст,
но нужно быть уверенным, что он не совпадёт с каким-то логином. Затем происходит возврат на страницу
с формами.
На страницах сайта должен быть код, в котором происходит проверка — есть ли в сессии логин. И в зависимости
от этого определяется, как должна выглядеть страница. В нашем примере есть только одна страница. На ней и
сделаем проверку. Только код будет разделён на две части. Открытие сессии должно производиться до вывода
каких-либо данных, то есть, до HTML кода. Поэтому эта часть располагается в самом начале страницы. А остальной
код находится внутри тэга <body>, потому что он добавляет на страницу контнет.
Добавим в начало страницы такую строку:
2 |
<?php session_start(); ?> |
Остальной скрипт расположим в теге <body>, в его начале:
101112131415161718 192021222324 |
<?php $login=$_SESSION; if ($login) { if ($login=='er login') { echo '<p>Введён неправильный логин или пароль</p>'; $_SESSION=''; } else echo "<p>Здравствуйте, $login</p>"; } else echo '<p>Здравствуйте, гость</p>'; ?> |
Если в сессии есть логин, но в нём содержится строка «er login», то выводится сообщение, что логин или
пароль неправильный. После вывода сообщения логин становится пустым. Это сделано для того, чтобы сообщение
выводилось только один раз и при переходе на другие страницы не появлялось. Если логин другой, значит
пользователь авторизован и страница формируется как для зарегистрированных. Если логина нет, значит
авторизации ещё не было и страница выводится для не зарегистрированных пользователей.
Мы рассмотрели только общий принцип создания функции регистрации и авторизации. На реальных сайтах она
сложнее. Формы должны выводиться только для не авторизованных пользователей. Кроме того, нужно добавить
кнопку «Выход», которая отменяет авторизацию. При регистрации нужно делать
проверку формы, проверять уникальность логина и добавить
подтверждение пароля.
Создание API для входа пользователей
В приведенном ниже коде установим заголовки, чтобы файл знал откуда должен поступить запрос и какой тип данных принимается
Откроем файл api/login.php и поместим в него следующий код
Мы сравним электронную почту пользователя и пароль из базы данных, поэтому нам нужно подключение к БД.
Нам также нужно создать экземпляр пользовательской таблицы, это позволит нам проверить, существует ли электронная почта, и прочитать хешированный пароль.
Замените комментарий // здесь будет соединение с БД в файле login.php следующим кодом:
Создание файла конфигурации (ядра)
Файл login.php не будет работать без файла core.php. Этот файл содержит общие настройки / переменные нашего приложения.
У нас есть переменные, используемые нашей библиотекой JWT для кодирования и декодирования токена. Значение $key должно быть вашим собственным и уникальным секретным ключом.
iss — адрес или имя удостоверяющего центра
aud — имя клиента для которого токен выпущен
iat — время, когда был выпущен JWT
nbf — время, начиная с которого может быть использован (не раньше, чем)
Вы также можете использовать exp — идентифицирует время истечения срока действия токена
Откроем api/config/core.php и добавим следующий код
Скачайте библиотеку PHP-JWT c GitHub’а
Скопируйте содержимое библиотеки в api/libs/
Тест входа в систему
Введём следующий URL запрос
В Body вставьте следующее значение JSON
Нам нужно сохранить сгенерированный JWT чтобы потом его использовать для проверки
Для проверки на неудачный вход в систему измените значение пароля на 222 (это неверный пароль)
Вывод:
Я не стал делать всё за вас, так как программист должен сам учится всё делать и уметь находить информацию, также надо сказать, что эта статья сделана для начинающим PHP разработчикам, поэтому, более опытным, эта статья вряд ли поможет.
В будущем я напишу более продвинутую статью, о том как сделать систему авторизации и регистрации на PHP, но используя уже более продвинутые технологии.
Также рекомендую:
- Как сделать регистрацию на PHP через email
- PHP или Python, что лучше учить для Web разработчики в 2020
- Как выучить язык PHP с нуля и максимально эффективно
- Почему язык PHP не любят программисты, с чем связано
Итоги
Мы сделали простейшую регистрацию с PDO или же подготовленными запросами. Сейчас нет проверок на существование пользователей, то есть можно создать несколько одинаковых логинов, что ни есть хорошо, конечно же, но для понимания принципов сойдет. Так же, перед каждым отдельным сообщением пришлось добавить «
В реальном проекте нужно добавлять отдельную шапку и там прописать это один раз и забыть.
Вы наверное заметили что мы не сделали страницу выхода из аккаунта. Да, так и есть, попробуйте сделать ее сами. Оставлю только подсказку, сессию можно удалить с помощью функции «session_destroy()», что будет означать что мы вышли из аккаунта.
3.77/5 (24)