Django Rest Framework требует как сессию, так и токен для выполнения аутентифицированного запроса
Я нахожусь в процессе создания REST API с использованием Django Rest Framework для веб-приложения, сделанного третьей стороной.
Я пытаюсь настроить REST API так, чтобы он был доступен с использованием SessionAuthentication или TokenAuthentication и чтобы документация Swagger (созданная с помощью drf-yasg) была доступна без аутентификации.
На данный момент я столкнулся с проблемой: когда я отправляю запрос к моему API, он требует, чтобы в запросе были отправлены sessionid и token. Если я удаляю токен, то получаю:
{"detail":"Invalid token."}
и если я удаляю сессию, он перенаправляет меня на страницу входа в основное приложение. Если я отправляю его с обоими параметрами в запросе, то получаю корректный ответ от моего REST API.
Мой файл settings.py выглядит следующим образом:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
#'rest_framework.authentication.SessionAuthentication',
],
}
Как видно выше, даже при отключенной SessionAuthentication для REST API, он все равно требует установки сессии. Кто-нибудь знает, почему он это делает? Мои первые мысли, что он использует django.contrib.auth
и применяет это ко всем представлениям, но я не уверен, я немного профан в Django, если честно.
Другая проблема заключается в том, что я выложил некоторую документацию для моего API с помощью drf-yasg, которую я хочу сделать доступной без аутентификации. Моя get_schema_view
для этого выглядит следующим образом:
schema_view = get_schema_view(
openapi.Info(
title="<redacted>",
default_version='v1',
description="<redacted>",
),
public=True,
permission_classes=[permissions.AllowAny],
authentication_classes=[]
)
Согласно документации drf-yasg это должно позволить любому получить доступ к документации, но опять же, когда я пытаюсь получить доступ к ней, я перенаправляюсь на страницу входа в приложение.