django-open-id: проверка CSRF не удалась
Я воспользовался рекомендацией в этом вопросе SO: Каково лучшее решение для OpenID с Django? и установлен django-openid-auth
для моего приложения.
Но я просто не могу заставить его работать, я всегда получаю CSRF verification failed. Request aborted.
когда я пытаюсь войти.
Я проверил все:
1.
{% csrf_token %}
присутствует в шаблоне:
<form name="fopenid" action="{{ action }}" method="post">
{% csrf_token %}
<fieldset>
<legend>Sign In Using Your OpenID</legend>
<div class="form-row">
<label for="id_openid_identifier">OpenID:</label><br />
{{ form.openid_identifier }}
</div>
<div class="submit-row ">
<input name="bsignin" type="submit" value="Log in">
</div>
{% if next %}
<input type="hidden" name="next" value="{{ next }}" />
{% endif %}
</fieldset>
</form>
2.
В views.py внутри django_openid_auth
Я обнаружил, что они используют RequestContext
:
return render_to_response(template_name, {
'form': login_form,
redirect_field_name: redirect_to
}, context_instance=RequestContext(request))
3.
мой MIDDLEWARE_CLASSES
содержит CsrfViewMiddleware
:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Я просто не могу понять, что еще может быть не так? Есть ли у вас какие-либо идеи?
Я использую Django 1.3 beta.
ОБНОВИТЬ
Кажется, это моя глобальная проблема. Я создал простую форму и получил тот же результат:
def index(request):
return render_to_response('index.html',
locals(),
context_instance=RequestContext(request))
index.html:
<form action="/" method="post">
{% csrf_token %}
<input type="text" name="test">
<input type="submit">
</form>
Визуализированный HTML:
<form action="/" method="post">
<div style="display:none"><input type="hidden" name="csrfmiddlewaretoken" value="1fbd5345560d325bf05809260f7d43c3"></div>
<input type="text" name="test">
<input type="submit">
</form>
В чем дело!?
2 ответа
На самом деле, я думаю, что это была первая ошибка, с которой я столкнулся в Django. Я обновил свою копию до свежего выпуска 1.3, и все начало работать. Хорошая работа, разработчики Django!
Я попробовал "manage.py runserver localhost:8000" вместо "manage.py runserver", и это сработало, я думаю, у него есть проблемы с cookie из-за ip в имени хоста btw. я получил эту ошибку со свежей копией django 1.3