2013-10-08 123 views
0

我有下面的代碼在下面,但我仍然得到「CSRF令牌丟失或不正確。」錯誤。有人發現我在這裏做錯了嗎?CSRF令牌丟失或不正確使用Jquery

<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); 
     } 
    }); 

回答

2

From the docs

在每個XMLHttpRequest上,將自定義的X-CSRFToken標頭設置爲CSRF標記的值。

第一步,你必須得到CSRF令牌本身。標記的推薦來源是csrftoken cookie,如果您已爲上述視圖啓用CSRF保護,則會設置該cookie。

var csrftoken = $.cookie('csrftoken'); 
+0

沒有,這將使HTML輸出正確的:

// 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插件餅乾取代的getCookie被簡化? – GrantU

+0

更新,以提供更好的答案更關係到jQuery的 – Ewan

+0

也有看文檔討論'ajax.beforeSend',那麼你不必費心注入csrftoken自己。 – bouke

相關問題