#javascript #python #django #django-rest-framework #http-status-code-403
#javascript #python #django #django-rest-framework #http-status-code-403
Вопрос:
Я пытаюсь сделать запрос PUT в моей пользовательской модели для редактирования имени пользователя, биографии и т. Д., Используя интерфейс Django Rest с React.
Когда я делаю запрос PUT по URL-адресу через клиент django rest, он работает без проблем. Из интерфейса, когда я не зарегистрирован ни у одного пользователя django, я могу отправить запрос PUT через AXIOS без проблем.
Как только я войду в любой пользователь django, даже с правами суперпользователя, я получаю ошибку 403 Forbidden в моем запросе PUT.
Вот мой views.py:
class RetrieveUpdateDestroyUser(RetrieveUpdateDestroyAPIView):
serializer_class = UserCreateUpdateSerializer
queryset = CustomUser.objects.all()
lookup_field = 'id'
permission_classes = (AllowAny,)
def update(self, request, *args, **kwargs):
"""
PUT and UPDATE requests handled by this method.
"""
return super().update(request, *args, **kwargs)
В моем интерфейсе я делаю запрос PUT (запрос put выполняется с помощью axios):
export class UserProxy extends BackendProxy {
updateUser(updatedUser, userID) {
let parameters = `user/${userID}`
return new Promise((resolve, reject) => {
this.putRequest(updatedUser, parameters)
.then(response => { resolve(response) })
.catch(error => {
console.log(error)
reject(error)
})
});
}
}
Просто очень смущен тем, почему я не получаю 403 запрещено, когда я не вошел в систему пользователя django, но я делаю, когда я вошел в систему. Я использую Python-Social-Auth также для входа в систему, если это имеет значение.
Спасибо!
Ответ №1:
Одна вещь, которая может вызвать это, — это если вы используете SessionAuthentication. Анонимные пользователи получают «аутентификацию» на ранних этапах процесса аутентификации. Аутентифицированные пользователи проходят дополнительную проверку CSRF. Если это не удается, выдается HTTP 403.
В моем случае я понял, что должен использовать GET, а CSRF не применяется (https://www.django-rest-framework.org/topics/ajax-csrf-cors/#csrf-protection ).
Комментарии:
1. Очень признателен, я в конечном итоге решил эту проблему, и, как вы сказали, это была проблема CSRF. Если кто-то еще ищет ответ, он находится в моем профиле