15

djangoを1.4に更新しました。しかし、ログインフォームを送信しようとすると、次のエラーが発生します。

禁止(403)CSRF検証に失敗しました。リクエストは中止されました。失敗の理由:CSRFトークンが欠落しているか正しくありません。

私のsettings.py(MIDDLEWARE_CLASSES)では、現在非推奨になっているため、次の行を削除する必要がありました。

'django.middleware.csrf.CsrfResponseMiddleware',

そして、私がこのエラーを受け取り始めたよりも。

いくつかの必要な情報:Urls.py

url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'}, name='login')
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',
)

login.html

{% 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 %}

誰かがこの問題を解決する方法を知っていますか?

4

4 に答える 4

9

コードは正常に見えます。Django1.3および1.4auth.views.loginはRequestContextを正しく使用します。チェックしてください:

  • まず、ブラウザのデータを消去して、再試行してください
  • 提出されたcsrfmiddlewaretokenの価値は何ですか
  • 正しいDjangoをインポートしますか?
  • 念のため、コンソールにUserWarningがありますか?:「テンプレートで{%csrf_token%}が使用されましたが、コンテキストが値を提供しませんでした。これは通常、RequestContextを使用していないことが原因です。」
于 2012-04-07T03:05:50.290 に答える
3
  1. 1.3および1.4の場合、「django.middleware.csrf.CsrfResponseMiddleware」の名前は「django.middleware.csrf.CsrfViewMiddleware」にする必要があります。
  2. また、私にとっては、GoogleChromeのCookieをクリアすることで機能しました。
于 2012-08-19T03:43:39.637 に答える
0

アプリがHTTPSにデプロイされた場合にも同様の問題が発生しました。クライアントサーバーがcsrfcookieにアクセスできるように、設定フラグCSRF_COOKIE_HTTPONLYをfalseに変更する必要がありました。

于 2017-02-05T13:32:02.063 に答える
0

ブラウザまたはGoogleChromeのCookieをクリアして、うまくいくことを願っています。

于 2020-12-07T19:09:07.813 に答える