Skip to content

longwinterday/API-with-jwt-token

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Разработка API c JWT-токеном

08/11/21

 Добро пожаловать в тестовое приложение!

Запуск контейнера докер

  • Убедитесь. что у вас установлен Docker
  • Запустите в терминале
  docker run -p 8000:8000 --rm longwinterday/test_app python manage.py runserver 0.0.0.0:8000
  • Если ваш 8000 порт занят, пробросте на любой свободный порт для этого замените в команде -p 8000:8000 например на порт -p 5000:8000
  docker run -p 5000:8000 --rm longwinterday/test_app python manage.py runserver 0.0.0.0:8000
  • В случае успеха приложение будет доступно по адресу http://0.0.0.0:8000 (или по проброшенному порту)

Функционал приложения

Регистрация

Отправив на http://0.0.0.0:8000/registration POST-запрос с JSON вида:

  {
  "name": "имя пользователя",
  "password": "пароль пользователя"
  }

. вы успешно зарегистрируете нового пользователя в данном сучае сервер вернёт JSON с именем и id пользователя.

Имя пользовательно уникально, приложение не даст создать нового пользователя с таким же именем, что уже есть в БД.

В БД уже создан пользователь user1 (password: user1).

Ограничение на длину имени, пароля 255 символов. Дополнительных требований к валидации пароля нет.

Авторизация

Отправив на http://0.0.0.0:8000/login POST-запрос с JSON вида:

  {
  "name": "имя пользователя",
  "password": "пароль пользователя"
  }

. вы успешно авторизуете пользователя в данном сучае сервер вернёт JSON с jwt токеном (время жизни токена 30 минут).

Авторизованы могут быть только зарегистрированные пользователи.

Отправка сообщений

Реализовано два способа отправки сообщений.

  • Основной способ.

Отправив на http://0.0.0.0:8000/message POST-запрос (с заголовками key=jwt, value=jwt токен полученный на этапе авторизации) с JSON вида:

  {
  "name": "имя пользователя",
  "message": "сообщение пользователя"
  }

. в случае валидности токена, вы успешно сохраните сообщение. Сервер вернёт информацию о том, что сообщение успешно сохранено.

  • Дополнительный способ.

При авторизации токен сохраняется в куки на 2 недели, поэтому если в заголовках POST запроса отсутствует токен, то приложение поищет его куки. В случае валидности токена из куки, сообщение будет успешно сохранено.

В том случае если в запросе и в куки содержатся разные токены, приоритет имеет токен из заголовков запроса

  • Особый случай

В том случае, если текст сообщения содержит патерн "history N", где N - положительное число, то вместо сохранения такого сообщения сервер вернёт N последних сообщений данного пользователя (если N не целое число, то округление в меньшую сторону).

Например запрос на http://0.0.0.0:8000/message вида

  {
  "name": "имя пользователя",
  "message": "history 5"
  }

, вернёт 5 последних сообщений пользователя (в этом случае так же проверяется токен).

Выход

Отправив на http://0.0.0.0:8000/logout POST-запрос, вы успешно выйдите из сеанса пользователя. Куки будут почищены. Вы в любом случае можете передать в заголовках валидный токен при запросе на http://0.0.0.0:8000/message

Техническая информация

Приложение написано на python 3.10 и использованием DRF. Все зависимости наодятся в фйле requirements.txt БД SQLite

По всем вопросам можно обращаться на longwinterday@gmail.com Григорьев Алексей 2021 г.

About

Test task 08/11/21

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages