Однако каждый раз в обязательном порядке я получаю запрещенную ошибку 403 при попытке выйти из системы. У меня есть withCredentials:true и я включаю токен csrf в заголовок. У меня промежуточное программное обеспечение находится в правильном порядке, у меня есть все правильные настройки заголовков cors и разрешенные хосты.
При проверке сведений о сети с помощью F12 я вижу, что файл cookie sessionID не создается. отправляется вместе с токеном csrf. Не знаете, почему? Я в замешательстве.
Вот мой код для входа в систему и выхода из системы, а также соответствующий код settings.py и view.py для выхода из системы.
Аксиос:
Код: Выделить всё
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);
});
}
Код: Выделить всё
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',
]
Код: Выделить всё
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)
Подробнее здесь: https://stackoverflow.com/questions/793 ... d-with-axi