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 %}
誰かがこの問題を解決する方法を知っていますか?
コードは正常に見えます。Django 1.3および1.4auth.views.loginはRequestContextを正しく使用しています。以下を確認してください。
アプリがHTTPSにデプロイされた場合にも同様の問題が発生しました。クライアントサーバーがcsrfcookieにアクセスできるように、設定フラグCSRF_COOKIE_HTTPONLYをfalseに変更する必要がありました。