- склонировать репозиторий -
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