我已经注释掉了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 )
Run Code Online (Sandbox Code Playgroud)
但是当我使用Ajax发送请求时,Django仍然会响应'csrf令牌不正确或丢失',并且在将X-CSRFToken添加到头文件后,请求将成功.
这里发生了什么 ?
帮助
\n失败原因给出:
\nOrigin checking failed - https://praktikum6.jhoncena.repl.co does not match any trusted origins.\nRun Code Online (Sandbox Code Playgroud)\n一般来说,当存在真正的跨站请求伪造时,或者当 Django\xe2\x80\x99s CSRF 机制未正确使用时,就会发生这种情况。对于 POST 表单,您需要确保:
\nYour browser is accepting cookies.\nThe view function passes a request to the template\xe2\x80\x99s render method.\nIn the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.\nIf you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those …Run Code Online (Sandbox Code Playgroud) 我正在学习使用 Django、Django REST Framework 和 Docker 进行测试驱动开发课程(Michael Herman)。我的问题是,在本地运行的容器中,管理面板打开没有问题,但放置在heroku上的容器给出错误(Forbidden (403) CSRF验证失败。请求中止。)..在哪里查看?谢谢!
我用一个应用程序、一个模型和一个管理面板开始了一个新的 Django 1.11 项目。在本地,一切正常。当我将它部署到 Amazon EC2 并尝试登录到管理面板时,我收到 403(CSRF 验证失败。请求中止。)。我在调试日志中看到了这一点:
[WARNING] 2017-05-21 11:23:52,142 csrf 14263 140377210439424 Forbidden (Referer checking failed - Referer is insecure while host is secure.): /admin/login/
我使用 Chrome 的网络实用程序检查了请求,我注意到在我的请求标头中我有:
Cookie:csrftoken=hFhzOJPMOhkNWWWfRtlMOEum9jXV8XXWnOtw3OwZm2En9JUqYRVq632xyZfwSpzU
在我的表单数据中,我有:
csrfmiddlewaretoken:RHNpPfOHhg42FZnXmn9PZgNm3bN40C41XQZm4kvUP1oCSMl8tLJthFlxsR5FK4GZ
这两个应该是一样的吧?根据我的理解,它们确实如此,但是当我在本地环境中尝试相同的方法时,我发现它们也不相同,但是在那里工作正常,并且我在响应标头中获得了与请求中发送的相同的令牌标题,所以我认为它们不需要完全相同?注意:我目前没有安全连接 (https),但会在修复此问题后进行处理。
我已经尝试/检查了以下内容:
CSRF_COOKIE_DOMAIN(/sf/answers/2948074741/)CSRF_COOKIE_SECURE未设置,因此False(/sf/answers/2070219441/)ALLOWED_HOSTS我在 SO 上找到的其他答案提到您需要在表单本身中做一些事情,但这是来自 Django 框架的表单。
附加信息
我的 nginx 配置来自/etc/nginx/nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events …Run Code Online (Sandbox Code Playgroud) 对 Django 来说还很陌生。按照 Django 网站上的民意调查教程完成第二个项目。之前的努力虽然简单,但进展顺利。这次访问管理员登录时遇到问题。
我已经创建了一个超级用户并使用这些凭据,当我尝试登录时http://127.0.0.1:8000/admin/login/?next=/admin/出现以下错误:
Forbidden (403)
CSRF verification failed. Request aborted.
Reason given for failure:
CSRF cookie not set.
Run Code Online (Sandbox Code Playgroud)
看看这个和这个,大多数答案要么详细说明清除浏览器cookie(这样做),包括'django.middleware.csrf.CsrfViewMiddleware'在您的中间件中(我这样做),要么创建豁免或解决方法。
1)我的问题是为什么管理门户现在似乎不起作用,但它对我之前的项目起作用并且我正在遵循相同的步骤?
2)管理面板的属性不应该通过项目启动继承吗?
3)当文档显示默认激活CSRF中间件时,我该如何为admin设置CSRF ?
谢谢你的帮助。
设置.py
"""
Django settings for aptly project.
Generated by 'django-admin startproject' using Django 1.9.7.
For more information on this file, see
https://docs.djangoproject.com/en/1.9/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.9/ref/settings/
"""
import os
import dj_database_url
from .secret_settings import *
# Build …Run Code Online (Sandbox Code Playgroud) Forbidden (CSRF token missing or incorrect.)当我尝试使用登录页面时收到错误。
场景如下:
Forbidden (CSRF token missing or incorrect.)错误。csrf_token是在表格中。为什么会发生这种情况?我该如何修复它?
我不知道这会有帮助,但这是我的views.py登录信息
class Login_View(LoginView):
template_name = 'login.html'
def post(self, request, *args, **kwargs):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
response_data = {}
if user is not None:
if user.is_active:
login(request, user)
response_data['result'] = 'success'
else:
return HttpResponse("Inactive user.")
else:
response_data['result'] = 'fail'
return HttpResponse(json.dumps(response_data), content_type="application/json")
Run Code Online (Sandbox Code Playgroud) django ×6
csrf ×3
django-csrf ×3
python ×3
ajax ×1
amazon-ec2 ×1
docker ×1
heroku ×1
python-3.x ×1