Django REST Framework Simple JWT
djangorestframework-simplejwt - это популярный пакет для реализации JWT (JSON Web Token) аутентификации в Django REST Framework.
Установка и настройка
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// Получение токена
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 для добавления токена в черный список.