2013-10-08 58 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

相关问题