Урок 44. Автоматическое использование JWT. Логин и регистрация с JWT

📁 Блок: Auth / JWT ⏱️ Время изучения: ~70 мин 🎯 Сложность: Средняя
#jwt #simplejwt #login #register #cookies #middleware #drf

⚡ Кратко: JWT-логин и регистрация в DRF

djangorestframework-simplejwt позволяет выдавать access и refresh токены при логине/регистрации, хранить их в httpOnly-куках и автоматически обновлять через middleware.

  • LoginView — authenticate() + RefreshToken.for_user() → set_cookie(access, refresh)
  • JWTAuthenticationMiddleware — извлекает токен из куки, ставит HTTP_AUTHORIZATION в заголовок
  • RegisterSerializer — ModelSerializer + create_user(); после регистрации сразу выдаёт токены
  • LogoutView — delete_cookie('access_token'), delete_cookie('refresh_token')

Что запомнить: access-токен живёт 5 минут, refresh — 1 день. При истечении access — middleware автоматически обновляет его через refresh-токен.

Частая ошибка: забыть добавить rest_framework_simplejwt.token_blacklist в INSTALLED_APPS и выполнить миграции при использовании BLACKLIST_AFTER_ROTATION.

📖 О чём этот урок

Урок 44 посвящён практической реализации системы аутентификации на основе JWT в Django REST Framework. Изучаем, как токены автоматически сохраняются при логине в httpOnly-куках и затем используются для авторизации при всех последующих запросах без ручного копирования.

Второй блок урока — регистрация пользователя через API с немедленной выдачей JWT-токенов. Это позволяет пользователю зарегистрироваться и сразу начать работу с защищёнными эндпоинтами.

Что изучим

  • Установка и настройка djangorestframework-simplejwt в settings.py
  • LoginView: логин с сохранением токенов в httpOnly-куках
  • JWTAuthenticationMiddleware: автоматическое подставление токена из куки в заголовок
  • Автоматическое обновление access-токена через refresh-токен в middleware
  • LogoutView: удаление токенов из куки
  • RegisterSerializer и RegisterView: регистрация с немедленной выдачей токенов
  • Вспомогательная функция set_jwt_cookies() для переиспользования логики
  • Тестирование через Postman: логин, доступ к защищённому ресурсу, логаут

📚 Что повторить перед изучением

🎯 Что изучать дальше

  • → Урок 45: Сигналы в Django, настройка email
  • Кастомизация JWT-payload: добавление дополнительных claims (роли, email)
  • dj-rest-auth / django-allauth — готовые решения для auth-flow
  • Token rotation и blacklist: защита от компрометации refresh-токена