Django 1.2 CSRF и HTTP сообщения из Google Web Toolkit - PullRequest
1 голос
/ 20 сентября 2010

У меня есть веб-приложение GWT, работающее с серверной частью Django. Я недавно обновил Django до 1.2 и не могу заставить работать сообщения HTTP из моего приложения GWT. Я получаю эту ошибку:

Ошибка проверки CSRF. Запрос прерванный.

Причина отказа:

CSRF token missing or incorrect.

Я включил промежуточное программное обеспечение csrf ('django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware'), которое работает для таких приложений, как вход в систему, но похоже, что токен не добавляется к сообщениям, сделанным через GWT. Есть идеи? Заранее спасибо.

1 Ответ

0 голосов
/ 20 сентября 2010

Если вы проверили шаблоны для auth.login, вы заметите, что токен CSRF явно включен в тег <form>.

<form method="post" action=".">
    {% csrf_token %}

Это расширяется в скрытое поле, когда страница отображается по запросу GET.Что-то вроде:

<form method="post" action=".">
    <div style='display:none'>
        <input type='hidden' name='csrfmiddlewaretoken' 
             value='90064bf0e86edacfdb60595e3e2b8f23' />
    </div>

Этот токен затем передается обратно в представление на POST и проверяется.

Следовательно, прежде чем вы сможете POST перейти к защищенному представлению CSRF, вы должны сначала получить токен из указанного представления.

Можете ли вы проверить / убедиться, что у вас есть токен CSRF, прежде чем отправлять запрос POST в представление?Кроме того, вы можете отключить защиту CSRF для вида, используя декоратор csrf_exempt.Это не может быть хорошей идеей, хотя.

Обновление

В этом и заключается мой вопрос: я не использую шаблоны django для своего интерфейса и, следовательно, не могу пометить формы токеном,Я использую GWT для своего внешнего интерфейса, который отображает форму для сообщения.

Вы уже делаете запрос GET к представлению Django перед рендерингом страницы?В этом случае вы можете получить токен CSRF, проанализировав содержимое ответа.

Если нет, вам придется явно сделать запрос GET к представлению (при условии, что он поддерживает GET) и проанализироватьответ для токена CSRF.Пример см. в этом вопросе .

...