Урок 44. Автоматическое использование JWT. Логин и регистрация с JWT
⚡ Кратко: 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: логин, доступ к защищённому ресурсу, логаут
📚 Что повторить перед изучением
- ← Урок 43: Практикум 10 — Auth/DRF
- Урок 40: Введение в аутентификацию — JWT-структура, access/refresh
- DRF: APIView, Response, status — уроки 26, 29
- Django: middleware,
MiddlewareMixin,authenticate() - HTTP-куки:
httpOnly,secure,samesite
🎯 Что изучать дальше
- → Урок 45: Сигналы в Django, настройка email
- Кастомизация JWT-payload: добавление дополнительных claims (роли, email)
- dj-rest-auth / django-allauth — готовые решения для auth-flow
- Token rotation и blacklist: защита от компрометации refresh-токена