CSRF_Token в методе POST с использованием Vue. js и Django Rest Framework - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь отправить запрос POST из шаблона Vue. js в мой API, созданный с помощью Django. При отправке я получаю токен 403 CSRF, отсутствующий или ошибочный. Поскольку я разделил переднюю и заднюю части, у меня нет вида с {csrf_token} на стороне Django.

Как мне отправить мою форму?

Я попробовал несколько примеров в Интернете, используя куки, но я новичок и мне нужно больше объяснений о теме POST и CSRF

У меня есть представление Djano View (и связанные с ним URL-адреса), например:

def get_csrf_token(request):
token = get_token(request)
return JsonResponse({'token': token})

Whe Я запрашиваю URL, получил JSON с токеном.

А на лицевой стороне я использую этот метод для получения токена:

getToken: function() {
                this.loading = true;
                this.$http.get('/qualite/get-token/')
                    .then((response) => {
                        this.token =response.data;
                        this.loading = false;
                    })
                    .catch((err) => {
                        this.loading = false;
                        console.log(err);
                    })
            },


addNc: function() {
                    let headers = {
                        'Content-Type': 'application/json;charset=utf-8'
                    };
                    if(this.token !== '') {
                        headers['HTTP_X-XSRF-TOKEN'] = this.token
                    }

                    this.loading = true;
                    this.$http.post('/qualite/api/nc/',this.newNc, {headers: headers})
                        .then((response) => {
                            this.loading = false;
                        })
                        .catch((err) => {
                            this.loading = false;
                            console.log(err)
                        })
                },

1 Ответ

0 голосов
/ 24 апреля 2020

Для CSRF вы получаете по умолчанию после входа пользователя в систему, кроме session, если вы используете SessionAuthentication (это аутентификация по умолчанию, используемая в DRF).

Вы должны отправить при каждом запросе в заголовке вы можете ссылаться на эту ссылку , чтобы узнать больше об отправленном заголовке, так как его имя изменено и может быть настроено.

Обратите внимание, что в настройках Вы должны убедиться, что для CSRF_COOKIE_HTTPONLY установлено значение False (по умолчанию), чтобы иметь возможность читать его со стороны клиента JS.

Другой путь будет удалять CSRF принудительное выполнение запросы (но настоятельно рекомендуется не рекомендуется из соображений безопасности), подробнее об этом можно узнать из ответа здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...