@zlodiak

Как обменяться csrf-токеном с фронтендом?

Есть фронтенд на angular и бекенд на django2.2.2. Фронтенд состоит из одной странички, на которой есть форма регистрации. Я хотел бы её подписать csrf-токеном, отправить и проверить наличие токена на стороне сервера.
Вот что я пытался сделать чтобы реализовать эту идею

view:
from django.shortcuts import render
from django.contrib.auth.models import User
from django.http import JsonResponse
from django.views.decorators.csrf import ensure_csrf_cookie


@ensure_csrf_cookie
def get_csrf(request):
    response = JsonResponse([{"cookie_set": True}], safe=False)
    return response

def registration(request):
    # some payload
    response = JsonResponse([{"registration_successful": True}], safe=False)
    return response


На фронтенде я при загрузке странички с формой отправляю запрос, на который отвечает контролер get_csrf(). Тут по моему понимаю на фронт должен вернуться csrf-токен в виде куки.

далее при отправке формы я мог бы извлечь куку с клиента и отправить её вместе с остальными POST-параметрами в контроллер registration(). В случае её отсутствия контроллер просто не обработает данные формы.

Проблема в том, что кука не устанавливается после первой загрузки странички на фронте. И я не понимаю почему, ведь если в адресную строку браузер вбить:
127.0.0.1:8000/app_auth/get_csrf

, то кука устанавливается.

Подскажите пожалуйста в чём я ошибаюсь и куда мне двигаться. Только пожалуйста не предлагайте высокоуровневые решения потому что я хотел бы разобраться в механизме вообще
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы