Токен CSRF не проверяется - PullRequest
       41

Токен CSRF не проверяется

0 голосов
/ 17 октября 2018

У меня есть форма:

<form action="{% url "some_url" %}" method="post">
    {% csrf_token %}
    <input type="text">Text Input
    <button type="submit">Submit</button>
</form>

Который отправляется через AJAX:

$(function () {
    $('form').submit(function (e) {
        e.preventDefault();
        $.post($(this).attr('action'), $(this).serialize(), function (response) {
            console.log(response);
        });
    });
});

URL-адреса к этому представлению:

class SomeView(View):
    def post(self, request, *args, **kwargs):
        context = dict(**some_data)
        rendered_html = render_to_string('some_template.html', context, RequestContext(self.request))
        return JsonResponse(dict(html=rendered_html))

Всеэто работает.Проблема в том, что он также работает, когда токен CSRF не отправляется, я получаю точно такой же успешный ответ:

$.post($(this).attr('action'), function (response) {
    console.log(response);
});

Я ожидаю, что возникнет какая-то ошибка, потому что токен CSRF отсутствует.

Чтобы указать очевидное: CsrfViewMiddleware находится в пределах MIDDLEWARE_CLASSES.

Явное использование csrf_token приводит к тому же результату, когда токен не отправляется:

method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
    return super(SomeView, self).dispatch(request, *args, **kwargs)

Что я могу сделать, чтобы обеспечить его проверку?

1 Ответ

0 голосов
/ 19 октября 2018

@ dabadaba, может быть, токен CSRF отправлен в cookie.Поэтому независимо от того, что вы публикуете, куки будут отправлены на сервер.Подробнее читайте здесь: https://docs.djangoproject.com/en/2.1/ref/csrf/

...