2011-04-05 58 views
4

Django已經更新爲1.3,實際上從1.2.5開始,它已經擴展了該方案以將一個跨站點請求僞造保護令牌傳遞給XMLHttpRequests。 Django人會幫忙提供an example for jQuery來爲每個XHR應用一個特定的頭文件。保護基於prototype.js的基於CSRF的XHR請求

原型(並因此Scriptaculous)必須符合此方案,但我找不到一種方法來告訴原型添加X-CSRFToken標頭。最好的做法是以一種跨應用程序的方式進行一次(如jQuery)。

有沒有辦法做到這一點?

回答

7

這是胡亂猜測,但你可以嘗試extending基AJAX類...

Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap(
    function (callOriginal, options) { 
     var headers = options.requestHeaders || {}; 
     headers["X-CSRFToken"] = getCookie("csrftoken"); 
     options.requestHeaders = headers; 
     return callOriginal(options); 
    } 
); 
+0

我終於有一些時間來測試你的解決方案,和它的工作。我只是將'getCookie'函數集成到匿名函數中,就像它在Django提供的jQuery示例中一樣。 – Lloeki 2011-04-27 15:28:46