首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-open-id: CSRF验证失败

django-open-id: CSRF验证失败
EN

Stack Overflow用户
提问于 2011-03-25 18:07:24
回答 2查看 1.5K关注 0票数 1

我放弃了这个问题的建议:What's the best solution for OpenID with Django?,并为我的应用程序安装了django-openid-auth

但是我就是不能让它工作,当我尝试登录的时候,我总是得到CSRF verification failed. Request aborted.

我已经检查了所有东西:

1.

模板中存在{% csrf_token %}

代码语言:javascript
复制
<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.

在我发现的django_openid_auth内部的views.py中,他们使用RequestContext

代码语言:javascript
复制
return render_to_response(template_name, {
                    'form': login_form,
                    redirect_field_name: redirect_to
                    }, context_instance=RequestContext(request))

3.

我的MIDDLEWARE_CLASSES包含CsrfViewMiddleware

代码语言:javascript
复制
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测试版。

更新

这似乎是我的全球问题。我创建了一个简单的表单,并得到了相同的结果:

代码语言:javascript
复制
def index(request):
    return render_to_response('index.html',
                              locals(),
                              context_instance=RequestContext(request))

index.html:

代码语言:javascript
复制
<form action="/" method="post">
    {% csrf_token %}
    <input type="text" name="test">
    <input type="submit">
</form>

呈现的HTML:

代码语言:javascript
复制
<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>

怎么了!?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-25 18:28:14

实际上,我认为这是我在Django遇到的第一个bug。我已经将我的副本更新到1.3的最新版本,一切都开始工作了。干得好,Django开发人员!

票数 0
EN

Stack Overflow用户

发布于 2011-06-17 23:33:19

我试了试“cookie runserver localhost:8000”而不是"manage.py runserver“,我猜是因为主机名btw中的ip,所以它有一些cookie问题。我在django 1.3的最新版本中遇到了这个错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5431010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档