2011-12-30 2 views
0

Я использую django для приложения для веб-сайта, в основном. Мне нужно написать страницу холста для обработки запросов. В простейшей форме, у меня есть:Получение внутренней ошибки при загрузке приложения холста через FB, но не напрямую

(r'^canvas/','commitments.views.canvas'), 

в urls.py, а также:

@csrf_exempt 
def canvas(request): 
    return HttpResponse("Hello world") 

views.py в. Все это работает отлично, если я загружаю страницу напрямую. Если, однако, я загружаю страницу через холст Facebook, у меня возникает ошибка, связанная с modsecurity ModSecurity: Output filter: Failed to read bucket (rc 104): Connection reset by peer [hostname "..."] [uri "/canvas/"].

Любые мысли о том, что я здесь делаю неправильно? Спасибо за помощь.

+0

Установите 'DEBUG = True' в settings.py, и вы увидите вывод отладки и stacktrace –

+0

Спасибо. Я сделал это, но для некоторых ошибок я до сих пор не получаю вывод отладки и stacktrace - не знаю, почему, но так все и было для меня все время. – sean

+0

Из журналов Apache ('ModSecurity: выходной фильтр: не удалось прочитать ведро (rc 104): сброс соединения с помощью peer [hostname" ... "] [uri"/canvas/"]'), похоже, что это проблема с модой? Несмотря на освобождение страницы от CSRF? Я на Dreamhost, если это помогает. – sean

ответ

0

(х-пост из here: решение может быть таким же)

Так что я потратил слишком много времени, пытаясь понять это. Я остановился на (слегка дерьмовом) обходе: добавьте {% csrf_token %} в любое место в вашем шаблоне (я предполагаю, что вы передали аргумент context_instance=RequestContext(request) на ваш render_to_response или что-то еще).

Я думаю, что происходит то, что cookie фактически не устанавливается (это можно подтвердить, проверив файлы cookie в инструментах разработки любого браузера). Добавление этого кода к шаблону заставляет это. Я чувствую, что это может быть исправлено в более поздних версиях Django, и кажется, что есть очевидные исправления для 1.4+ (например, см. here). К сожалению, dreamhost застрял с 1.2.3, поэтому нам нужно сделать это.

0

На данный момент я смог справиться с этим, отключив mod_security («дополнительная веб-безопасность» на панели Dreamhost).

Я пытался бороться с ним, во-первых, с помощью следующих .htaccess инструкции, но они не кажется, сделали трюк:

SetEnvIfNoCase Request_URI ^/canvas/.*$ MODSEC_ENABLE=Off 
<IfModule mod_security.c> 
    SecFilterSelective REQUEST_URI "^/canvas/.*$" "allow,pass" 
    SecFilterScanPOST Off 
</IfModule> 

Я хотел бы, чтобы иметь возможность повторно включить mod_security, за исключением того, чтобы разрешить URI canvas, поэтому, если у кого-то есть решение для этого, я был бы признателен. Благодаря!