SWFUpload + Django 1.2 CSRF проблема - PullRequest
2 голосов
/ 20 февраля 2011

Всякий раз, когда я пытаюсь загрузить файл с помощью SWFUpload на Django 1.2, я получаю ошибку HTTP 403. Я уверен, что это ошибка CSRF, потому что когда я использую декоратор @csrf_exempt в работает нормально.

window.onload = function {
    var settings = {
        ...
        post_params: {
            "csrfmiddlewaretoken": "{{csrf_token}}"
        },
        ...
    };

var swfu = new SWFUpload(settings);
};

Я также попытался использовать SWFUpload.addPostParam () без успеха

var swfu = new SWFUpload(settings);
swfu.addPostParam('csrfmiddlewaretoken', '{{csrf_token}}'); 

Я уверен, что передаю токен шаблону, потому что вижу его в источнике. Каталог, в который я загружаю, доступен для записи. Я чмод 777 это.

Есть идеи?

1 Ответ

0 голосов
/ 26 февраля 2011

Помимо "csrfmiddlewaretoken" в пост-параметрах, django также ожидает, что файл cookie CSRF будет установлен правильно, в противном случае пользователь получит ошибку 404.

В промежуточном программном обеспечении для копирования маркера сеанса в файл cookie, скопируйте csrftokenну и сработает.Я следовал инструкциям http://blog.fogtunes.com/2009/11/howto-integrate-swfupload-with-django/ и обновил часть промежуточного программного обеспечения, как показано ниже, и она работает:

class SWFUploadMiddleware(object):

def process_request(self, request):
    if (request.method == 'POST') and (request.path == reverse('uploads.views.manual')) :  
        if request.POST.has_key(settings.SESSION_COOKIE_NAME):
            request.COOKIES[settings.SESSION_COOKIE_NAME] = request.POST[settings.SESSION_COOKIE_NAME]  
        if request.POST.has_key('csrftoken'):           
            request.COOKIES['csrftoken'] = request.POST['csrftoken']   
...