⚖️ Старый vs Новый
Устаревшие паттерны аутентификации из лекции → современный подход DRF 3.15+ / SimpleJWT 5.x
⚡ Ключевые изменения
- SIMPLE_JWT: ключи теперь в snake_case (
access_token_lifetime) в SimpleJWT 5.x — старые ключи в CamelCase устарели - Ручное создание токенов через
Token.objects.get_or_create()заменяется встроеннымobtain_auth_token - Строковые пути вместо классов в
DEFAULT_AUTHENTICATION_CLASSES— то и другое работает, но строки — стандарт
1. Настройки SIMPLE_JWT: CamelCase → snake_case
Из лекции (старое — SimpleJWT < 5.0): Ключи в
SIMPLE_JWT использовались в CamelCase.
Старый подход (из лекции)
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS': False,
'AUTH_HEADER_TYPES': ('Bearer',),
}
Современный подход (SimpleJWT 5.x+)
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=5),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
"ROTATE_REFRESH_TOKENS": False,
"AUTH_HEADER_TYPES": ("Bearer",),
"TOKEN_OBTAIN_SERIALIZER":
"rest_framework_simplejwt.serializers"
".TokenObtainPairSerializer",
}
⚠️ Проверить по документации: в SimpleJWT 5.x ключи SIMPLE_JWT остаются в SCREAMING_SNAKE_CASE. Проверь актуальную версию: SimpleJWT Settings.
2. Ручное создание токенов → obtain_auth_token
Старый подход (из лекции)
# views.py — ручная генерация токена
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView
class GetTokenView(APIView):
def post(self, request):
user = request.user
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key})
Современный подход
# urls.py — встроенное представление DRF
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
path('api-token-auth/', obtain_auth_token, name='api_token_auth'),
]
# Автоматически принимает username+password,
# возвращает {"token": "..."}
3. Аутентификация на основе сессий → токены для API
Старый подход (веб-приложения)
# Django Login View + SessionAuthentication
# Подходит для браузерных приложений
# Требует CSRF-токенов для небезопасных методов
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
],
}
Современный подход (REST API)
# JWT или Token для stateless API
# Нет зависимости от сессий/cookies
# Подходит для SPA, мобильных приложений
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication'
'.JWTAuthentication',
],
}
4. Передача учётных данных в URL → заголовок
Старый подход (из лекции — только для тестирования)
# Только для локального тестирования!
# Небезопасно: credentials в URL
http://username:password@127.0.0.1:8000/products/
Современный подход
# В заголовке запроса — безопасно с HTTPS
GET /products/ HTTP/1.1
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
# Или через Postman:
# Authorization → Basic Auth → Username / Password