Django rest api + react. Как исправить ошибку forbidden 403 при попытке разлогинивания

Рейтинг: 0Ответов: 0Опубликовано: 03.07.2023

Создаю простой веб-сервис в котором есть функция логина. До какого-то момента использовал настройки proxy в package.json и указывал пути для fetch в формате /api/logout, но теперь для задачи пришлось перейти на полные пути и использовать CORS в джанго, но теперь при попытке разлогиниться появилась странная ошибка 403 forbidden, которой до этого не было. Вот мой view в джанго, который отвечает за разлогинивание.

from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.decorators import api_view, permission_classes, authentication_classes
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.authentication import SessionAuthentication
from core.serializers import UserSerializer, LoginRequestSerializer, iPadSerializer
from core.models import iPad
from rest_framework import status, viewsets, generics
from django.http import JsonResponse
from django.contrib.auth import authenticate, login, logout

@api_view(['POST'])
@permission_classes([AllowAny])
def logout_view(request):
    logout(request)
    return Response(status=status.HTTP_200_OK)

А вот код на стороне реакт, который фетчит этот апи и должен разлогинивать меня И на стороне джанго И на стороне реакта, но не делает ничего из этого т

const handleLogout = () => {
        setLoading(true);
        fetch('http://localhost:8000/api/logout', {
            credentials: 'include',
            method: 'POST',
            headers: {
                'Content-Type': 'application/json;charset=utf-8',
                'X-CSRFToken': csrftoken,
            },
        })
            .then((response) => {
                if (response.ok) {
                    setIsLoggedIn(false);
                    setError(null);
                } else {
                    throw Error(`Something went wrong: code ${response.status}`);
                }
            })
            .catch((error) => {
                console.log(error);
                setError('Ошибка при выходе');
            })
            .finally(() => setLoading(false));
    };

Т.к проблема может быть с настройками CORS, вот мои настройки CORS:

CORS_ALLOW_CREDENTIALS = True

CORS_ALLOWED_ORIGINS = [
    'http://localhost:3000',
    'http://127.0.0.1:3000',
]

CORS_ALLOW_METHODS = [
    "DELETE",
    "GET",
    "OPTIONS",
    "PATCH",
    "POST",
    "PUT",
]
CORS_ALLOW_HEADERS = [
    "accept",
    "accept-encoding",
    "authorization",
    "content-type",
    "dnt",
    "origin",
    "user-agent",
    "x-csrftoken",
    "x-requested-with",
]

Снова попрошу заметить, что до того, как я перестал использовать прокси и относительные пути, всё работало как надо и сломалось только после замены путей на полные и использование CORS. Также пробовал менять права для view, но ничего не помогает.

Ответы

Ответов пока нет.