Django REST Framework Simple JWT

djangorestframework-simplejwt - это популярный пакет для реализации JWT (JSON Web Token) аутентификации в Django REST Framework.

Установка и настройка

1# Установка пакета
2pip install djangorestframework-simplejwt
1# Или через Poetry
2poetry add djangorestframework-simplejwt
 1# settings.py
 2from datetime import timedelta
 3
 4REST_FRAMEWORK = {
 5    'DEFAULT_AUTHENTICATION_CLASSES': [
 6        'rest_framework_simplejwt.authentication.JWTAuthentication',
 7    ],
 8}
 9
10SIMPLE_JWT = {
11    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
12    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
13    'ROTATE_REFRESH_TOKENS': True,
14    'BLACKLIST_AFTER_ROTATION': True,
15}

Настройка URL

 1# urls.py
 2from rest_framework_simplejwt.views import (
 3    TokenObtainPairView,
 4    TokenRefreshView,
 5)
 6
 7urlpatterns = [
 8    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
 9    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
10]

Использование в клиенте

 1// Получение токена
 2const response = await fetch('/api/token/', {
 3    method: 'POST',
 4    headers: {'Content-Type': 'application/json'},
 5    body: JSON.stringify({username: 'user', password: 'pass'})
 6});
 7const tokens = await response.json();
 8
 9// Использование токена
10fetch('/api/protected/', {
11    headers: {'Authorization': `Bearer ${tokens.access}`}
12});

Кастомизация JWT

 1# serializers.py
 2from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
 3
 4class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
 5    def validate(self, attrs):
 6        data = super().validate(attrs)
 7        data['username'] = self.user.username
 8        data['email'] = self.user.email
 9        return data
10
11# views.py
12from rest_framework_simplejwt.views import TokenObtainPairView
13
14class CustomTokenObtainPairView(TokenObtainPairView):
15    serializer_class = CustomTokenObtainPairSerializer

FAQ

Q: Как кастомизировать JWT payload?
A: Создай кастомный serializer, наследуясь от TokenObtainPairSerializer.

Q: Как сделать logout с JWT?
A: Используй BlacklistView для добавления токена в черный список.