Проблема с тем, что аутентификация сессии не сохраняется при вызове из фронтенда React в бэкенд Django

У меня есть следующий код:

LoginPage.js:

import React from  'react';
import axios from 'axios';
import { useNavigate, Navigate } from 'react-router-dom';
import { Button, Grid, TextField } from '@mui/material'

import DisplayAppBar from './DisplayAppBar';

export default function LoginPage() {

    const [username, setUsername] = React.useState('');
    const [password, setPassword] = React.useState('');

    const navigate = useNavigate();

    const handleLogin = async (e) => {
        e.preventDefault();
        try {
            axios.post('http://localhost:8000/login/', {
                username: username,
                password: password
            }).then((response) => {
                // navigate('/home'); // Navigate to home page
                axios.get("http://localhost:8000/check-login-status/")
                .then(response => {
                    console.log(response.data);
                })
                .catch(error => {
                    console.log(error);
                    // return <Navigate to="/" />;
                })
            }).catch(error => {
                console.error(error);
            });
        } catch (error) {
            console.error(error);
        }
    }

    return (
        <div>
            <DisplayAppBar />
            <Grid container direction="column" justifyContent="center" alignItems="center" spacing={2} >
                <Grid item>
                    <TextField required label="Username" variant="outlined" id="usernameField" onChange={(e) => setUsername(e.target.value)}/>
                </Grid>
                <Grid item>
                    <TextField required label="Password" variant="outlined" id="passwordField" onChange={(e) => setPassword(e.target.value)}/>
                </Grid>
                <Grid item>
                    <Button variant="outlined" onClick={handleLogin}>Login</Button>
                </Grid>
            </Grid>
        </div>
    )
};

urls.py:

from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from TeamData import views

urlpatterns = [
    path('club/', views.ClubListCreate.as_view()),
    path('club/<int:pk>/', views.ClubDetail.as_view()),
    path('swimmer/', views.SwimmerListCreate.as_view()),
    path('swimmer/<int:pk>/', views.SwimmerDetail.as_view()),
    path('user/', views.UserListCreate.as_view()),
    path('user/<int:pk>/', views.UserDetail.as_view()),
    path('login/', views.LoginView.as_view(), name='login'),
    path('logout/', views.LogoutView.as_view(), name='logout'),
    path('signup/', views.UserListCreate.as_view(), name='signup'),
    path('check-login-status/', views.CheckLoginStatus.as_view(), name='check-login-status'),
]

urlpatterns = format_suffix_patterns(urlpatterns)

views.py:

и serializers.py:

from rest_framework import serializers
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from .models import (Club, Swimmer, Group, SwimmerGroup, Coach, GroupCoaches, Admin, 
                     GroupPractices, Competition, CompetitionCoachDelegations, 
                     CompetitionSwimmersAttending, EventRecord, Event, Entry)

class LoginSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField()

    def validate(self, attrs):
        username = attrs.get('username')
        password = attrs.get('password')

        if username and password:
            user = authenticate(username=username, password=password)
            if not user:
                raise serializers.ValidationError('Invalid credentials')
        else:
            raise serializers.ValidationError('Must include "username" and "password"')
        attrs['user'] = user
        return attrs

class UserSerializer(serializers.ModelSerializer):
    class Meta(object):
        model = User
        fields = ['id', 'email', 'username', 'password']
    
class ClubSerializer(serializers.ModelSerializer):
    class Meta:
        model = Club
        fields = '__all__'

class SwimmerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Swimmer
        fields = '__all__'

Когда я "успешно" вхожу в систему (из LoginPage.js) (т.е. ввожу правильную информацию и получаю ответ, подтверждающий, что информация была правильной), я сталкиваюсь с проблемой, когда следующая строка check-login-status по-прежнему возвращает, что пользователь не аутентифицирован. Может ли кто-нибудь увидеть проблему, которая может быть причиной этого?

Я не уверен, как действовать, основываясь на информации в Интернете - я полагаю, что это может быть связано с сохранением идентификатора сеанса, но я был бы признателен за любые рекомендации.

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