Запрос 403 Forbidden POST при попытке выйти из системы с помощью React front end с Axios и Django с rest-framework

Я продолжаю получать ошибку 403 Forbidden при попытке выйти из учетной записи пользователя. Я могу нормально войти в систему, я вижу в куках, что есть sessionID и csrf-токен. Однако каждый раз при попытке выйти из системы я получаю ошибку 403 Forbidden. У меня стоит withCredentials:true, и я включаю токен csrf в заголовок. У меня есть промежуточное ПО в правильном порядке, у меня есть все правильные конфигурации cors-headers и разрешенные хосты.

При просмотре сведений о сети с помощью F12 я вижу, что cookie sessionID не отправляется вместе с токеном csrf. Не уверен, почему? Я в недоумении.

Вот мой код для фронт-энда входа и выхода, а также соответствующий код settings.py и views.py для logout.

Axios:

import axios from "axios";
axios.defaults.xsrfCookieName = 'csrftoken';
axios.defaults.xsrfHeaderName = 'X-CSRFToken';

const client = axios.create({
  baseURL: "http://127.0.0.1:8000",
  withCredentials: true,
});

export default client;

Вход:

function submitLogin(e) {
    e.preventDefault();
    client.post("/api/login/", { username, password }, {
      withCredentials: true,
    })
      .then(function(res) {
        if (res.data.redirect_url) {
          navigate(res.data.redirect_url);
        } else {
          console.error("No redirect URL provided.");
        }
      })

Выход:

function logout(e) {

    e.preventDefault();
    const csrftoken = document.cookie.split('; ').find(row => row.startsWith('csrftoken='))?.split('=')[1];

    client.post("api/logout/", {}, {
        withCredentials: true,
        headers: {
            'X-CSRFToken': csrftoken,
        }
    }).then(res => {
        navigate("/login");
    }).catch(error => {
        console.error('Logout failed:', error);
    });

} 

Settings.py

CORS_ALLOW_CREDENTIALS = True

CORS_ALLOWED_ORIGINS = [
    'http://localhost:5173',  # React development server
    'http://127.0.0.1:5173',  # Alternative localhost address
]
CSRF_TRUSTED_ORIGINS = [
    'http://127.0.0.1:5173',
    'http://localhost:5173',
]

Views.py:

class LogoutView(APIView):
    permission_classes = [IsAuthenticated]

    def post(self, request):
        if request.user.is_authenticated:
            logout(request)
            return Response({'message': 'Logged out successfully'})
        else:
            return Response({'detail': 'User not authenticated'}, status=403)

Пожалуйста, помогите!

Вернуться на верх