Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSRF验证失败。请求被中止。关于django_Django_Django Views_Django Registration - Fatal编程技术网

CSRF验证失败。请求被中止。关于django

CSRF验证失败。请求被中止。关于django,django,django-views,django-registration,Django,Django Views,Django Registration,我关注Django1.3Web开发。对于登录,我得到以下错误 Forbidden (403) CSRF verification failed. Request aborted. Help Reason given for failure: CSRF token missing or incorrect. 这是我的settings.py包含的应用程序。这正是书中所说的 INSTALLED_APPS = ( 'django.contrib.auth', 'django.c

我关注Django1.3Web开发。对于登录,我得到以下错误

Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
    CSRF token missing or incorrect.
这是我的settings.py包含的应用程序。这正是书中所说的

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'djangocricket.Cricket',
    'djangocricket.cms'
)
这本书说,它应该包含,django.contrib.auth.views.login。。我把它包括在

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'djangocricket.Cricket.views.index', name='default'),
    url(r'^user/(\w+)/$', 'djangocricket.Cricket.views.user_home', name='user home'),
    url(r'^login/$', 'django.contrib.auth.views.login'),
    # url(r'^djangocricket/', include('djangocricket.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    #url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^news/', 'djangocricket.cms.views.index', name='index'),
    #url(r'^news/(?P<slug>[^\.]+).html', 'djangocricket.cms.views.detail', name='get_single_news_item'),
    url(r'^admin/', include(admin.site.urls)),
)
urlpatterns=patterns(“”,
#示例:
url(r'^$','djangocket.Cricket.views.index',name='default'),
url(r“^user/(\w+/$”,“djangocket.Cricket.views.user_home”,name='user home'),
url(r“^login/$”、“django.contrib.auth.views.login”),
#url(r“^djangocket/”,包括('djangocket.foo.url'),
#取消注释下面的admin/doc行以启用管理员文档:
#url(r“^admin/doc/”,包括('django.contrib.admindocs.url'),
#取消注释下一行以启用管理员:
url(r“^news/”、“djangocket.cms.views.index”、name='index'),
#url(r'^news/(?P[^\.]+).html',djangocket.cms.views.detail',name='get_single_news_item'),
url(r“^admin/”,包括(admin.site.url)),
)
还有我的注册/login.html。。。从书上粘贴下来的副本。应该可以

<html>
<head>
    <title>Django Bookmarks - User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
    <p>Your username and password didn't match.
        Please try again.</p>
{% endif %}
<form method="post" action=".">
    <p><label for="id_username">Username:</label>
        {{ form.username }}</p>
    <p><label for="id_password">Password:</label>
        {{ form.password }}</p>
    <input type="hidden" name="next" value="/" />
    <input type="submit" value="login" />
</form>
</body>
</html>

Django书签-用户登录
用户登录
{%if form.errors%}
您的用户名和密码不匹配。
请再试一次

{%endif%} 用户名: {{form.username}

密码: {{form.password}}


我缺少什么?

您需要将
{%csrf\u token%}
模板标记添加为Django模板中
表单
元素的子元素

这样,模板将呈现一个值设置为CSRF标记的隐藏元素。当Django服务器收到表单请求时,Django将验证令牌是否与表单中呈现的值匹配。这对于确保POST请求(即数据更改请求)源自真实的客户端会话是必要的

有关更多信息,请查看Django文档,网址为:

以下是跨站点请求伪造攻击的概述:

如果您正在使用
csrf\u令牌
模板标记,且问题未得到解决,请检查
csrf\u COOKIE\u域
设置。您应该在开发环境中将其设置为
None

只是想提供有关该主题的其他信息。如果这种情况发生在您身上,并且您确信已将令牌注入表单中,并且视图函数正在正确处理一切,但问题仍然存在。确保没有禁用输入字段的javascript代码。发生在我身上,经过几个小时的调试,终于意识到

<input type="hidden" name="csrfmiddlewaretoken" value="pHK2CZzBB323BM2Nq7DE2sxnQoBG1jPl" disabled="">

我也有同样的问题。我在添加{%csrf_token%}时解决了这个问题。最后,我的代码是:

 <form id='formulario2' method='post' action='>
      <h3>Enter:</h3>
      {% csrf_token %}


     <input id="id_mesaje" name="mesaje" type="email" placeholder="E-mail"/>
    <input type='submit' name="boton2" value='Suscribete' style="display:inline-block;background-color: #80e174; "/>
 </form>

在你的表格里。这对我来说是可行的。那么,我们为什么要使用跨站点请求伪造


答案很简单,它只是在您的网页上添加了另一个安全层,任何恶意用户都无法使用错误的令牌验证请求。

如果您的开发服务器没有ssl,请检查
CSRF\u COOKIE\u SECURE
;提交表单时,
禁用的
表单元素的值不会发送到服务器。如果有人需要避免
CSRF验证
(出于某些原因),可能会很有用
{% csrf_token %}