- склонировать репозиторий -
git clone https://github.com/godninoff/react-jwt-auth.git
- перейти в папку с проектом -
cd react-jwt-auth/client
npm i
- установить зависимостиcd ..
- вернуться в общую папку с серверомnpm i
- установить зависимости для сервера
npm run dev
- запустить приложение с сервером.
Реализовать одностраничное приложение (SPA), в котором пользователь может зарегистрироваться и просмотреть личную информацию о себе.
Для простоты разработки данного приложения в виде backend-части в данном репозитории представлен файл app.js
. backend-часть дополнять и изменять не нужно
. Процесс запуска api на вашей машине описан ниже.
Авторизация и регистрация на backend-части реализована через JSON Web Token.
Приложение должно состоять из следующих страниц:
/login
- страница с формой входа/register
- страница с формой регистрации/
- Главная страница с информацией о пользователе.
Описание страницы /login
Здесь содержится форма авторизации пользователя.
Также должен быть предусмотрен переход на страницу /register
в виде кнопки.
Описание страницы /register
Здесь содержится форма регистрации пользователя.
Также должен быть предусмотрен переход на страницу /login
в виде кнопки.
Описание страницы /
- Главная страница
Здесь содержится информация о пользователе - его аватар, текст о себе, имя пользователя.
Желательно оформить в виде карточки.
- Убедитесь, что у вас стоит Node.js последней LTS версии: https://nodejs.org/en/
- Приложение должно быть написано на
typescript
. - Основная библиотека -
React
. - Компонентная библиотека -
ant-design
- Убедитесь, что у вас стоит последняя node LTS версии. Ссылка для скачивания: https://nodejs.org/en/
- В консоли открыть папку
frontend
- Устанавливаем зависимости api - в консоли запускаем команду
npm install
- Запускаем api - в консоли запускаем команду
node app.js
В результате в консоли получаем output:
Сервер с API стартовал по адресу http://localhost:8080
При выполнении запросов к api в консоли будут возникать логи, удобно для тестирования приложения.
Чтобы отправить запрос с токеном нужно указать заголовок Authorization: Bearer ${токен пользователя}
- Реализацию frontend-части следует делать
в отдельном репозитории
, а не в этом репозитории. Этот репозиторий содержит в себе только backend-часть в виде api. - Во время разработки приложения не стоит изобретать велосипеды. Для компонентов формы и карточек предусмотрена библиотека
ant-design
. - При работе с
React
следует использоватьReact Router
. State-manager на ваше усмотрение. - Приложение должно быть разработанно на функциональных компонентах, с использованием
React Hooks
. - При разработке использовать статическую типизацию и другие возможности
typescript
- При перезапуске backend-части приложения список пользователей сбрасывается к стандартному состоянию!
- Написанные unit/e2e-тесты будут плюсом. Для юнитов у нас используется
jest
, для e2e -cypress
Результат данного тестового задания следует опубликовать на github.com
в виде репозитория с публичным доступом
Ниже будут представлены все возможные endpoint'ы api.
Важные замечания:
- По умолчанию api запускается по адресу
http://localhost:8080
- При перезапуске api пользователи сбрасываются в стандартное состояние
- Для теста api можно использовать
postman
или любую другую утилиту, которая умеет слать http-запросы
Данный эндпоинт принимает запросы на авторизацию пользователей.
Метод HTTP-запроса - POST
Поле | Тип | Обязательно | Описание |
---|---|---|---|
username | String | + | Имя пользователя |
password | String | + | Пароль |
Поле | Тип | Описание | Значение |
---|---|---|---|
token | String | JWT-токен пользователя | %сгенерированный jwt-токен% |
error | String | Ошибка, если таковая имеется | null |
Поле | Тип | Описание | Значение |
---|---|---|---|
token | String | Токен | null |
error | null | Ошибка | "Введите правильные имя пользователя/пароль" |
Данный эндпоинт принимает запросы на авторизацию пользователей.
Метод HTTP-запроса - POST
Поле | Тип | Обязательно | Описание |
---|---|---|---|
username | String | + | Имя пользователя |
password | String | + | Пароль |
Поле | Тип | Описание | Значение |
---|---|---|---|
message | String | Сообщение | "Пользователь успешно зарегистрирован" |
Поле | Тип | Описание | Значение |
---|---|---|---|
message | String | Сообщение | "Пользователь с таким именем уже зарегистрирован" |
Данный эндпоинт возвращает информацию о пользователе, которая есть на сервере
Метод HTTP-запроса - GET
Поле | Тип | Описание | Значение |
---|---|---|---|
id | Integer | id пользователя | %id пользователя% |
username | String | Имя пользователя | %имя пользователя% |
avatar | String | http-ссылка на картинку с аватаркой пользователя | %avatar% |
about | String | Текст "о пользователе" | %текст в api% |
Если в заголовке не передавать jwt-токен, либо jwt-токен был просрочен - вернется ответ
Поле | Тип | Описание | Значение |
---|---|---|---|
message | String | Сообщение | "Не удалось получить информацию о пользователе" |
- https://reactjs.org/ - React
- https://reactjs.org/docs/static-type-checking.html#typescript - typescript
- https://reactjs.org/docs/hooks-reference.html - React Hooks API
- https://ant.design/ - ant-design
- https://reactrouter.com/ - React router
- https://redux-toolkit.js.org/rtk-query/overview - RTK Query
- https://www.npmjs.com/package/redux-persist - Redux Persist