2010-06-24 50 views
0

我想使用YUI上傳器將文件上傳到Django視圖。發送Django CSRF Coo​​kie與YUI上傳器請求

但是,我在CsrfViewMiddleware中收到403錯誤。我已經確定問題是由於Flash上​​傳程序(即YUI上傳程序使用的)未在文件上載請求中發送CSRF cookie。

YUI上傳器的uploadAll()函數允許以對象形式與上傳請求一起發送附加數據。由於CSRF cookie可以很容易地檢索到,因此我試圖通過uploadAll()函數將cookie添加到請求中,但我不完全確定發送它的格式是什麼,以便CsrfViewMiddleware可以找到它期望的cookie 。這不起作用:

var cookie = YAHOO.util.Cookie.get('csrftoken'); uploader.uploadAll(url, 'POST', { csrfmiddlewaretoken: cookie });

任何有識之士將不勝感激!

回答

0

不幸的是,由於Flash播放器的限制,YUI上傳器無法將cookie插入請求的頭部,這是後端期望的地方。你可以做的唯一事情就是將POST變量添加到請求中,這就是其中的另一個參數。但是,這意味着您需要額外的服務器邏輯來將它們提取爲POST變量,並將它們與cookie記錄進行比較 - 默認情況下它不起作用。

如果你不能修改服務器端的代碼,你將無法從上傳:(發送的請求進行身份驗證。

+0

你說得對。我最終通過引入層固定它的中間件在使用正確的cookie到達CSRF中間件之前手動更新請求對象。 – Derek 2010-06-24 22:35:37