tupoi
@tupoi

Как отправлять csrftoken на сервер Django?

Доброго времени суток, использую jquery.ajax и django, не могу отправить post запрос, по причине того, что Forbidden (CSRF token missing or incorrect.):
ajax request
<script type="text/javascript">

    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }

    function getAjax() {
        var csrftoken = getCookie('csrftoken');
        alert(csrftoken);
        $.ajaxSetup({
            headers: {
                'X-CSRF-Token': csrftoken
            }
        });

        $.ajax({
            url: "/os/detect/",
            type: "POST",
            data: {
                os_type: "macOS"
            },
            success: function (msg) {
                alert(msg);
            },
            error: function () {
                alert("опять не получилось");
            }
        });
    }
</script>


django view

@csrf_protect
def userOS(request):
    if request.is_ajax():
        os_type = request.POST['os_type']
        AnalyzeOS.objects.create(
            os_type=os_type
        )
        return HttpResponse('OK')
    else:
        return render_to_response('os.html')


при этом смотрю через мозилу куки, там есть csrf, который пришел с сервера, смотрю свой post запрос, там также установлен csrf в header'е, но ошибку все равно выдает, что я делаю не так?
  • Вопрос задан
  • 806 просмотров
Решения вопроса 1
sim3x
@sim3x
https://docs.djangoproject.com/en/1.11/ref/csrf/#s...

xhr.setRequestHeader("X-CSRFToken", csrftoken);

X-CSRFToken
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы