2010-06-24 58 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