Вопрос по – Django - токен CSRF отсутствует или неверен

12

Я только что обновил свой django до 1.4. Но я получаю следующую ошибку при попытке отправить форму для входа в систему:

Forbidden (403) Ошибка проверки CSRF. Запрос отменен. Причина отказа: токен CSRF отсутствует или неверен.

В моем settings.py (MIDDLEWARE_CLASSES) мне пришлось удалить следующую строку, потому что теперь она устарела:

<code>'django.middleware.csrf.CsrfResponseMiddleware',
</code>

А потом я начал получать эту ошибку.

Некоторая необходимая информация: Urls.py

<code>url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'}, name='login')
</code>
<code>MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
#   'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
</code>

Login.html

<code>{% extends "base.html" %}
{% block title %} Login {% endblock %}
{% block content %}



   <div id="text">
        <table>
          <form action="" method="post">
          {% csrf_token %}
            <tr>
                <td><label for="username">Email:</label></td>
                <td><input type="text" name="username" value="" id="username"></td>
            </tr>
            <tr>
                <td><label for="password">Password:</label></td>
                <td><input type="password" name="password" value="" id="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="Login" />
            {% if next %}
                <input type="hidden" name="next" value="{{ next }}" /></td>
            {% else %}
                <input type="hidden" name="next" value="/" /></td>
            {% endif %}
            </tr>
          </form>
        </table>


      {% if form.errors %}
        <p class="error">User or password incorrect</p>
      {% endif %}
    </div>
{% endblock %}
</code>

Кто-нибудь знает, как решить эту проблему?

Ваш Ответ

3   ответа
3
Для версий 1.3 и 1.4 «django.middleware.csrf.CsrfResponseMiddleware» следует называть «django.middleware.csrf.CsrfViewMiddleware» Кроме того, очистка файлов cookie Google Chrome позволила мне сделать это.
0

когда мое приложение было развернуто на HTTPS. Мне пришлось изменить флаг установки CSRF_COOKIE_HTTPONLY на false, чтобы клиентский сервер мог получить доступ к csrf cookie.

7

Django 1.3 и 1.4 auth.views.login правильно использует RequestContext. Пожалуйста, проверьте

Сначала очистите данные браузера и попробуйте снова Какова стоимость отправленного csrfmiddlewaretoken Ты правильно импортируешь Django? Просто убедитесь, что в консоли есть UserWarning, как ?: "{% csrf_token%} использовался в шаблоне, но контекст не предоставлял значение. Обычно это вызвано не использованием RequestContext."
Ясные данные браузера решают это для меня. chaim

Похожие вопросы