2012-12-07 62 views
0

當傳遞X-CSRFToken頭或發送POST數據中的csrfmiddlewaretoken到我的視圖時,它完全跳過了ajax處理程序並直接進入索引/基本視圖。CSRF令牌傳遞中斷我的Django視圖

的Javascript:

 
$.post("/action/register", { 
      name: $('#input_name').val(), 
      email: $('#input_email').val(), 
      csrfmiddlewaretoken: '{{ csrf_token }}' 

     }, function(data) { 
      var response; 
      try { 
      response = JSON.parse(data.toString()); 
      } catch(e) { 
      response = {"status":"error", "message":"Please try again later, we're having some tech issues!"}; 
      } 

      // ... process some stuff, the callback works which is good 
 

查看:


def handle_register(req): 
    ''' Request handler pyfor registration, should return JSON for the AJAX request. ''' 

    if req.is_ajax(): 
     return validate_and_register(req) 
    else: 
     return HttpResponse('{"status":"error","message":"Invalid request."}') 

urls.py:


from django.conf.urls.defaults import * 
# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^action/register$', 'views.handle_register', name='handle_register'), 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^.*$', 'views.handle_home', name='handle_home'), 
) 

當我不及格頭,我得到一個403(CSRF_VERIFICATION_FAILED)。當我傳遞適當的頭文件(在多個瀏覽器中確認)時,它會跳過/ action/register處理程序並直接進入「handle_home」視圖。

我被卡住了!

+0

此外,/管理/也不管用,它只是加載handle_home視圖。 – Kyle

回答

0

這可能可能是由於你的網址缺少斜槓

/動作/註冊

嘗試增加的URL,然後在你的JavaScript斜線。

另一種猜測是:

'views.handle_register'

缺少應用程序的名稱?

一個更安全的是也將使用反向網址:

from django.core.urlresolvers import reverse 

url = reverse('appname.views.handle_register') 

$.post(url, {}, func... 
+0

該問題與我的nginx配置有關。感謝您的答覆! – Kyle

0

這是nginx的一個問題。每Django的/ nginx的設置文檔,我發現我失去了這個在我的nginx的配置:

 

     fastcgi_split_path_info ^()(.*)$; 
+0

Hi @Kyle, 你在哪裏把這行放在nginx配置中? – Mahdi

+0

我加了這個,但是網址工作正常! – Mahdi