Есть фронтенд на 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-токен в виде куки.
далее при отправке формы(то есть когда пользователь кликает по кнопке submit) я мог бы извлечь куку с клиента и отправить её вместе с остальными POST-параметрами в контроллер registration(). В случае её отсутствия контроллер просто не обработает данные формы.
Проблема в том, что кука не устанавливается после первой загрузки странички на фронте. И я не понимаю почему, ведь если в адресную строку браузер вбить:
127.0.0.1:8000/app_auth/get_csrf
, то кука устанавливается.
Подскажите пожалуйста в чём я ошибаюсь и куда мне двигаться. Только пожалуйста не предлагайте высокоуровневые решения потому что я хотел бы разобраться в механизме вообще