我在此问题中拒绝了推荐:What's the best solution for OpenID with Django?并为我的申请安装了django-openid-auth
。
但是我无法让它工作,当我尝试登录时,我总是得到CSRF verification failed. Request aborted.
。
我检查了一切:
{% 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>
在我发现的django_openid_auth
内的views.py中,他们使用了RequestContext
:
return render_to_response(template_name, {
'form': login_form,
redirect_field_name: redirect_to
}, context_instance=RequestContext(request))
我的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>
出了什么问题!?
答案 0 :(得分:1)
我尝试了“manage.py runserver localhost:8000”而不是“manage.py runserver”,但它确实有效 我的猜测是因为主机名中的ip有一些cookie问题 顺便说一句。我用django 1.3的新副本得到了这个错误
答案 1 :(得分:0)
实际上,我认为这是我在Django遇到的第一个错误。我已将我的副本更新到1.3的新版本,一切都开始工作了。干得好,Django开发者!