Почему я получаю ошибку 403 Forbidden при выполнении POST-запроса к API входа в систему в Vue.js?
Я работаю над приложением Vue.js
, в котором пользователи могут входить в систему через API, используя библиотеку axios
. Однако, когда я отправляю POST-запрос на конечную точку API, я получаю ответ 403 Forbidden.
Вот Vue.js
код для запроса на вход в систему:
const response = await axios.post(
'https://apibackup.example.com/api/login/',
{
username: email.value,
password: password.value
},
{
headers: {
'Content-Type': 'application/json'
},
withCredentials: true,
withXSRFToken: true
}
)
А вот представление входа в систему из бэкенда Django:
def login_view(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
form = LoginForm(data)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Logic for handling user types here...
else:
return JsonResponse({'status': 'error', 'message': 'Invalid username or password'}, status=401)
else:
return JsonResponse({'status': 'error', 'errors': form.errors}, status=400)
except json.JSONDecodeError:
return JsonResponse({'status': 'error', 'message': 'Invalid JSON data'}, status=400)
Вот соответствующие настройки из Django
settings.py
:
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
'https://example.com',
'http://localhost:5173',
# other domains...
]
CSRF_TRUSTED_ORIGINS = [
'https://example.com',
'http://localhost:5173',
# other domains...
]
CSRF_COOKIE_SAMESITE = 'None'
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_DOMAIN = 'example.com'
Проблема: Когда я пытаюсь войти в систему, в консоли браузера появляется следующая ошибка:
POST https://apibackup.example.com/api/login/ 403 (Forbidden)
Это указывает на то, что запрос запрещен, но я не уверен, почему. Настройки сервера вроде бы разрешают необходимые происхождение и учетные данные, но запрос все равно не выполняется со статусом 403.
Что я пробовал:
Убедились, что настройки CORS в settings.py правильно установлены для домена и включают учетные данные. Проверили правильность установки флагов withCredentials и withXSRFToken в запросе axios. Убедился, что настройки CSRF настроены правильно. Не мог бы кто-нибудь помочь мне понять, почему я получаю эту ошибку 403 Forbidden и как ее решить?
Пробовали ли вы решение из этого поста, которое также связано с Django? Судя по тому, что вы описали, возможно, вам не хватает сессионных куки в вашем settings.py:
SESSION_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SECURE = True