Django rest api + react. Как исправить ошибку forbidden 403 при попытке разлогинивания
Создаю простой веб-сервис в котором есть функция логина. До какого-то момента использовал настройки 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, но ничего не помогает.