GVKun编程网logo

如何禁用Django的CSRF验证?(django csrf验证失败)

2

对于如何禁用Django的CSRF验证?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解djangocsrf验证失败,并且为您提供关于CSRF验证失败。请求中止。在Django上、CSRF验

对于如何禁用Django的CSRF验证?感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解django csrf验证失败,并且为您提供关于CSRF验证失败。请求中止。在Django上、CSRF验证失败请求中止在Django上、Django Admin – CSRF验证失败.请求中止、django – CSRF验证失败.请求中止.当我发送POST请求时的宝贵知识。

本文目录一览:

如何禁用Django的CSRF验证?(django csrf验证失败)

如何禁用Django的CSRF验证?(django csrf验证失败)

我已在中注释掉了csrf处理器和中间件产品线settings.py:

122 123 TEMPLATE_CONTEXT_PROCESSORS = (124     ''django.contrib.auth.context_processors.auth'',125 #    ''django.core.context_processors.csrf'',126     ''django.core.context_processors.request'',127     ''django.core.context_processors.static'',128     ''cyathea.processors.static'',129 )130 131 MIDDLEWARE_CLASSES = (132     ''django.middleware.common.CommonMiddleware'',133     ''django.contrib.sessions.middleware.SessionMiddleware'',134 #    ''django.middleware.csrf.CsrfViewMiddleware'',135     ''django.contrib.auth.middleware.AuthenticationMiddleware'',136     ''django.contrib.messages.middleware.MessageMiddleware'',137     ''django.middleware.locale.LocaleMiddleware'',138     # Uncomment the next line for simple clickjacking protection:139     # ''django.middleware.clickjacking.XFrameOptionsMiddleware'',140 )

但是,当我使用Ajax发送请求时,Django仍然会响应“ csrf令牌不正确或丢失”,并且在将X-CSRFToken添加到标头后,请求将会成功。

这里发生了什么 ?

答案1

小编典典

如果只需要一些视图而不使用CSRF,则可以使用@csrf_exempt:

from django.views.decorators.csrf import csrf_exempt@csrf_exemptdef my_view(request):    return HttpResponse(''Hello world'')

CSRF验证失败。请求中止。在Django上

CSRF验证失败。请求中止。在Django上

我正在关注Django 1.3 Web开发。对于登录,我收到以下错误

Forbidden (403)CSRF verification failed. Request aborted.HelpReason given for failure:    CSRF token missing or incorrect.

这是我的settings.py随附的APPS。这正是书上所说的样子。

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)),)

和我的registration / 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>

答案1

小编典典

你需要将{% csrf_token %}模板标记添加为formDjango模板中元素的子代。

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

CSRF验证失败请求中止在Django上

CSRF验证失败请求中止在Django上

如何解决CSRF验证失败请求中止在Django上?

你需要将{% csrf_token %}模板标记添加为formDjango模板中元素的子代。

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

解决方法

我正在关注Django 1.3 Web开发。对于登录,我收到以下错误

Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
    CSRF token missing or incorrect.

这是我的settings.py随附的APPS。这正是书上所说的样子。

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)),)

和我的registration / 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 Admin – CSRF验证失败.请求中止

Django Admin – CSRF验证失败.请求中止

每当我尝试登录Django的管理员应用程序时,在填写用户名和密码并提交表单后,该页面将永久挂起.

当我在浏览器中刷新POST请求时,我得到:

CSRF verification Failed. Request aborted.

当我再次刷新页面时,一切正常,我看到管理员应用程序,我已登录,我可以在我的应用程序和表格上进行CRUD操作.

有什么想法吗?

我在Django应用程序前面有Nginx反向代理做https握手.所以,当你去(例子):

https://platform.staging.com/admin/

Nginx反向代理那个

http://admin1.staging.platform.com/admin/

这是我的Nginx配置:

upstream admin-cluster {
  ip_hash;
  server admin1.staging.platform.com;
}

# force redirect of http to https
# application will be available only over https
server {
  listen 80 default;
  server_name platform.staging.com;
  rewrite     ^ https://$server_name$request_uri? permanent;
}

# https server
# traffic is going to local web servers over normal http
# front Nginx proxy server will hold ssl session
server {
  listen 443 ssl spdy;
  server_name platform.staging.com;
  keepalive_timeout 70;

  ssl                 on;
  ssl_certificate     /etc/ssl/platform.staging.com.crt;
  ssl_certificate_key /etc/ssl/platform.staging.com.key;

  location /admin {
    proxy_pass http://admin-cluster;
  }

}

编辑:

所以,我找到了一个解决方法.当我在我的Nginx反向代理上同时允许端口80但是将所有http请求重定向到这样的https:

server {
  listen 80 default;
  server_name platform.staging.com;
  rewrite     ^ https://$server_name$request_uri? permanent;
}

它解决了这个问题.知道为什么吗?

解决方法:

检查您的设置是否有覆盖SESSION_COOKIE_SECURE和CSRF_COOKIE_SECURE值的值,因为问题可能与CSRF cookie有关.编辑:我实际上这两个值设置为True.

另外,请检查您的SECURE_PROXY_SSL_HEADER设置,但我不确定它与您的问题有关.我在你的Nginx conf文件中缺少一个proxy_set_header X-Forwarded-Protocol指令,用于让Django知道你正在通过一个代理.

django – CSRF验证失败.请求中止.当我发送POST请求时

django – CSRF验证失败.请求中止.当我发送POST请求时

我从 Android应用程序发送POST请求到我的服务器,但我收到此错误:

enter image description here

POST看起来像:
http://example/my_page_url/1000
1000是一个ID.

这是我的观点方法:

def inventory(request,cross_id):

    text_file = open("test.txt","w")
    text_file.write('POST Received')

    text_file.write(cross_id.__str__())
    text_file.close()

    return render(request,'Inventory.html',{})

我的模板代码:

<form action='' method="POST">

     <button type="submit" id="btn_save" name="btn_save">Save</button>

    {% csrf_token %}

</form>

实际上,我并不需要调用模板,因为我只想在服务器上执行某些操作.但我现在调用模板只是为了防止任何错误.

我已经阅读了相同问题的其他答案,但是他们都错过了模板中的CSRF令牌或者其他方法,但我相信这里的情况有所不同.

解决方法

您需要将X-CSrftoken标头添加到所有POST请求中.

您可以从名为csrftoken的cookie中获取此标头的相应值.

要在Postman中测试它,您需要启用Interceptor插件(右上角).

安装完成后,向/ admin / login /发出GET请求(确保从浏览器中的站点注销).在cookies部分中,您应该看到名为csrftoken的cookie,复制其值.

现在,将请求类型设置为POST以获取相同的URL(/ admin / login),使用您之前复制的值添加名为X-CSrftoken的标头.在Body部分中设置用户名和密码字段,然后点击发送.

X-CSRFToken

如果您的POST不需要身份验证,则可以使用早期GET请求中的csrftoken.

我们今天的关于如何禁用Django的CSRF验证?django csrf验证失败的分享就到这里,谢谢您的阅读,如果想了解更多关于CSRF验证失败。请求中止。在Django上、CSRF验证失败请求中止在Django上、Django Admin – CSRF验证失败.请求中止、django – CSRF验证失败.请求中止.当我发送POST请求时的相关信息,可以在本站进行搜索。

本文标签: