Как получить csrf_tokken от django?
У меня есть React приложение, которое содержит свою форму для логирования. На http://127.0.0.1:8000/login/ развёрнут сервер djungo. Из формы на самом сервере я спокойно захожу в кабинет, но когда я пытаюсь войти, получаю в консоль djungo ошибку "Forbidden (CSRF token missing or incorrect.): /login/".
Я понимаю, что куки я нигде и не отправляю. Но как мне это сделать из формы?
Сама форма:
<form method="post" action="http://127.0.0.1:8000/login/">
<input
type="hidden"
name="csrfmiddlewaretoken"
/>
<table>
<tbody>
<tr>
<td>
<label htmlFor="id_username">Имя пользователя:</label>
</td>
<td>
<input
type="text"
name="username"
defaultValue="user"
autofocus
required
id="id_username"
/>
</td>
</tr>
<tr>
<td>
<label htmlFor="id_password">Пароль:</label>
</td>
<td>
<input
type="password"
name="password"
required
id="id_password"
/>
</td>
</tr>
</tbody>
</table>
<div className="row">
<div className="col-auto ml-auto">
<input
className="btn btn-sm btn-primary"
type="submit"
defaultValue="login"
/>
</div>
</div>
</form>
Ответы (1 шт):
Автор решения: Андрей Таков
→ Ссылка
Решение: примените ajax для передачи данных из формы (React отлично взаимодействует с jquery и ajax). Ниже указан рабочий вариант
views.py
from django.views.decorators.csrf import csrf_protect
@csrf_protect #я использую декоратор на той вьюхе которая требует защиты
def some_view(request):
...
example.html
<script>
var token = '{{csrf_token}}'; #передаем токен из вью
$.ajax({
headers: {"X-CSRFToken": token}, #добавляем его в наш запрос
type: "POST",
url: "/some_view/",
data: {
data
},
success: function () {
...