Если вы отметили шаблоны для auth.login
, вы заметите, что токен CSRF явно включен внутри тега <form>
.
<form method="post" action=".">
{% csrf_token %}
Это раскладывается в скрытом поле, когда страница отображается на GET
запросу. Что-то вроде:
<form method="post" action=".">
<div style='display:none'>
<input type='hidden' name='csrfmiddlewaretoken'
value='90064bf0e86edacfdb60595e3e2b8f23' />
</div>
Этот маркер затем передается обратно к представлению на POST
и выверены.
Следовательно, перед тем, как вы сможете POST
получить доступ к CSRF, вы должны сначала получить токен из указанного вида.
Вы можете проверить/убедиться, что у вас есть токен CSRF, прежде чем делать запрос POST
к представлению? В качестве альтернативы вы можете отключить защиту CSRF для представления с помощью декоратора csrf_exempt
. Это может быть не очень хорошая идея.
Update
This is the point of my question: I am not using django templates for my front-end and thus I cannot tag forms with the token. I am using GWT for my front-end, which is rendering the form for the post.
Вы уже сделать GET
запрос на представление Джанго перед отображением страницы? В этом случае вы можете получить токен CSRF, проанализировав содержимое ответа.
Если нет, вам нужно будет явно сделать запрос GET
к представлению (при условии, что он поддерживает GET
) и проанализировать ответ для токена CSRF. Например, см. this question.
Это вопрос моего вопроса: я * не * использовал шаблоны django для моего front-end, и поэтому я не могу пометить формы с помощью токена. Я использую GWT для моего front-end, который предоставляет форму для сообщения. – Neil
@NP: обновил мой ответ. См. Выше. –