Как получить csrfToken для фронтэнда для отправки логинов с помощью Django?
Я прочитал все вопросы об этом, но мне все еще не ясно.
Я не использую шаблоны Django для обработки функций входа (login, logout, changepassword, create user, etc).
Я попробовал ПОСТИТЬ на страницу учетных записей/входа в систему с помощью
"username": <user>,
"password": <password>
Но он также хочет получить токен CsrfViewMiddleware
. Мне неясно, где его взять. Должен ли фронт-энд сначала запросить его у другой конечной точки? Есть ли какой-то другой способ проверки CSR?
Обновить
Я использую Django Rest Framework
Пока вы взаимодействуете (обычно через auth) с клиентом, который поддерживает cookies, Django будет устанавливать csrftoken
-cookie. Вы можете прочитать этот куки на вашем фронтенде и включить его в ваши POST
.
РЕДАКТИРОВАТЬ:
Если вы не взаимодействуете ни с одной конечной точкой до отправки POST, вам придется получить токен заранее, как вы правильно предположили:
# views.py
from django.middleware.csrf import get_token
def csrf(request):
return Response({'csrf': get_token(request)})
Альтернативно, и я не проверял это явно, я понимаю, что любой запрос, который вы делаете к конечной точке с защитой CSRF, даст вам CSRF-токен, если запрос не отклонен (или не закончился исключением). Таким образом, теоретически, вы должны быть в состоянии сделать легкий запрос (HEAD
или OPTIONS
, например) к конечной точке и в итоге получить csrftoken
куки неявно.