403 Запрещенный запрос POST при попытке выхода из системы с использованием интерфейса React с Axios и Django с rest-framPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 403 Запрещенный запрос POST при попытке выхода из системы с использованием интерфейса React с Axios и Django с rest-fram

Сообщение Anonymous »

Я постоянно получаю сообщение об ошибке 403 Forbidden при попытке выйти из учетной записи пользователя. Я могу войти в систему нормально, я вижу в файлах cookie, что есть идентификатор сеанса и токен csrf.
Однако каждый раз в обязательном порядке я получаю запрещенную ошибку 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);
});

}
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)
Пожалуйста, помогите!

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-with-axi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»