Проверка CSRF не удалась. Прерванный запрос с JWT-токеном в Django RestAPI
В настоящее время я сталкиваюсь с ошибкой 403 Forbidden из-за отказа проверки CSRF при выполнении POST-запроса к конечной точке API моего приложения Django, даже при использовании JWT-токена для аутентификации. Я попытался отключить CSRF-защиту для API, сохранив ее для панели администратора с помощью пользовательского промежуточного ПО, но ошибка сохраняется. Ниже приведена соответствующая конфигурация в моих settings.py и views.py.
Я пытался отключить проверку CSRF для конечных точек API с помощью пользовательского промежуточного ПО, а также декораторов @method_decorator(csrf_exempt) и @csrf_exempt, но требование CSRF все равно, похоже, выполняется. Вот обзор шагов, которые я предпринял:
settings.py:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
"django.middleware.common.CommonMiddleware",
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"spBE.middlewares.disable_csrf.DisableCSRFOnAPI",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ALLOWED_HOSTS = ['*']
CSRF_TRUSTED_ORIGINS = ['http://localhost:1337','http://localhost:8000','http://10.126.2.27:8000','http://10.126.2.27:1337']
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_CREDENTIALS = True
urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from rest_framework.permissions import AllowAny
from rest_framework_simplejwt.authentication import JWTAuthentication
schema_view = get_schema_view(
openapi.Info(
title="Domocek API",
default_version='v1.1',
description="Breakpoints",
terms_of_service="https://app.slack.com/client/T04RV3CLJ2W/C06KV8FSY3X",
contact=openapi.Contact(email="nikita@gmail.com"),
license=openapi.License(name="License"),
),
public=True,
permission_classes=(AllowAny,),
authentication_classes=(JWTAuthentication,),
url='http://10.126.2.27:1337/',
)
urlpatterns = [
path("admin/", admin.site.urls),
path('api/', include('api.urls')),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
часть views.py
class ProjectCreatView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request, *args, **kwargs):
serializer = ProjectSerializer(data=request.data, context={'request': request})
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)