Проблема с тем, что аутентификация сессии не сохраняется при вызове из фронтенда 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 по-прежнему возвращает, что пользователь не аутентифицирован. Может ли кто-нибудь увидеть проблему, которая может быть причиной этого?
Я не уверен, как действовать, основываясь на информации в Интернете - я полагаю, что это может быть связано с сохранением идентификатора сеанса, но я был бы признателен за любые рекомендации.