0

以下のコードがありますが、「CSRF トークンが見つからないか正しくありません」というメッセージが表示されます。エラー。ここで私が間違ったことを誰かが見つけますか?

<form method="post" action="" id="registration">
  {{ form.as_p }}

  <input type="submit" value="{% trans 'Submit' %}" />
</form>


 <script>

$('#registration').submit(function(e){
     e.preventDefault(); //prevent default form submit

   $.ajax({

       url: '/accounts/registerAjax/',
       type: 'POST',
       contentType: "application/json;charset=utf-8",
       dataType: "json",
       data: {
             'csrfmiddlewaretoken': '{{ csrf_token }}',
            'id_username': $("#id_username").val(),
            'id_email': $("#id_email").val()
            },
        success: function() {
            alert('Test');

        },
        error: function(errorThrown){
            console.log(errorThrown);
            alert('Error');
            alert(errorThrown);
        }
    });
4

1 に答える 1

2

ドキュメントから。

各 XMLHttpRequest で、カスタムX-CSRFTokenヘッダーを CSRF トークンの値に設定します。

最初のステップとして、CSRF トークン自体を取得する必要があります。トークンの推奨ソースは csrftoken cookie です。これは、上記で概説したように、ビューの CSRF 保護を有効にした場合に設定されます。

// using jQuery
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;
}
var csrftoken = getCookie('csrftoken');

上記のコードは、jQuery Cookie プラグインを使用して getCookie を置き換えることで簡略化できます。

var csrftoken = $.cookie('csrftoken');
于 2013-10-08T14:51:08.993 に答える