Охватываемые темы: Установка, Endpoint для получения токена, Использование токена, Создание токена для пользователя.
Установка
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
python manage.py migrate
Endpoint для получения токена
# urls.py
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
path('api/token/', obtain_auth_token, name='api-token'),
]
# Получить токен
curl -X POST http://localhost:8000/api/token/ \
-H "Content-Type: application/json" \
-d '{"username": "user", "password": "pass"}'
# Ответ
{"token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"}
Использование токена
curl http://localhost:8000/api/tasks/ \
-H "Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
Создание токена для пользователя
from rest_framework.authtoken.models import Token
# При создании пользователя
token = Token.objects.create(user=user)
# Через сигнал (автоматически)
from django.db.models.signals import post_save
from django.contrib.auth.models import User
@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
Управление токенами в admin
# Автоматически доступно после migrate
# /admin/authtoken/token/
Кастомный endpoint с данными пользователя
from rest_framework.authtoken.models import Token
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
@api_view(['POST'])
@permission_classes([AllowAny])
def login_view(request):
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user:
token, _ = Token.objects.get_or_create(user=user)
return Response({'token': token.key, 'user_id': user.pk})
return Response({'error': 'Неверные данные'}, status=401)
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!