我正在运行Django 1.2.2,当我尝试登录Django管理员时出现以下错误:
禁止(403)CSRF验证失败.请求中止.
失败的原因:
没有CSRF或会话cookie.
**我没有对准系统管理员进行任何定制,当我检查源时,表格中有一个CSRF令牌,我认为是正确的位置.
当我查看正在发送的实际请求时,会发送一个csrf令牌,但Django仍然说CSRF验证失败.
谁能指出我正确的方向?为什么会这样?
当我执行POST表单时,Django 1.2一直给我这个CSRF验证错误.我"想"我已经完成了Django 1.2文档中提到的所有事情,即
确保MIDDLEWARE_CLASSES包含在'django.middleware.csrf.CsrfViewMiddleware'中
确保{%csrf_token%}
<form action="/words/new/" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Enter" />
</form>
Run Code Online (Sandbox Code Playgroud)在我的回复中使用RequestContext
def create(request):
if request.method == 'POST':
form = DefinitionForm(request.POST)
if form.is_valid():
form.save()
c = {}
return render_to_response('dict/thanks.html',c,
context_instance=RequestContext(request))
else:
form = DefinitionForm()
return render_to_response('dict/create_definition.html', {
'form' : form,
})
Run Code Online (Sandbox Code Playgroud)请注意,GET操作适用于此功能.所以我认为我正在使用render_to_response.
我甚至试图投入@csrf_protect装饰器,甚至那似乎没有用.我没有想法,我准备用笔记本电脑掐自己.
你们能想到的任何事情?
谢谢!
我正在开发一个应用程序,前端是一个AngularJS API,它向Django Rest Framework中开发的后端API发出请求.
The frontend is on the domain: https://front.bluemix.net
And my backend is on the domain: https://back.bluemix.net
Run Code Online (Sandbox Code Playgroud)
我在从前端API向后端API发出请求时遇到问题.错误是这样的:
Error: CSRF Failed: Referer checking failed - https://front.bluemix.net does not match any trusted origins.
Run Code Online (Sandbox Code Playgroud)
我正在使用CORS,我已经在Django后端API的settings.py中包含以下行:
ALLOWED_HOSTS = []
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CSRF_TRUSTED_ORIGINS = ['https://front.bluemix.net/']
CORS_REPLACE_HTTPS_REFERER = True
CSRF_COOKIE_DOMAIN = 'bluemix.net'
CORS_ORIGIN_WHITELIST = (
'https://front.bluemix.net/',
'front.bluemix.net',
'bluemix.net',
)
Run Code Online (Sandbox Code Playgroud)
谁知道如何解决这个问题?
我在Django 1.9中有一个使用SessionMiddleware的应用程序。我想在同一项目中为此应用程序创建一个API,但是在执行POST请求时,它不起作用@csrf_exempt批注。
我正在处理引发Postman的请求,这是我到目前为止的结果:
settings.py
MIDDLEWARE_CLASSES = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'a9.utils.middleware.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'a9.core.access.middleware.AccessMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
OAUTH2_PROVIDER = {
# this is the list of available scopes
'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'}
}
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
)
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` …Run Code Online (Sandbox Code Playgroud) 我正在使用最新版本的 Django 和 Django Rest Framework。我的 Web 应用程序提供了一个当前仅由前端使用的 API。
我正在使用相同的 API 路由创建 chrome 扩展。
当我使用本地服务器runserver 命令时,我没有问题。当服务器在 HTTPS 后面运行时,我始终有 403 错误。
{"detail":"CSRF Failed: Referer checking failed - no Referer."}
Run Code Online (Sandbox Code Playgroud)
我使用的视图如下:
@method_decorator(csrf_exempt, name='dispatch')
class ObtainAuthToken(APIView):
permission_classes = (AllowAny,) #maybe not needed in your case
def post(self, request):
username = request.POST['username'].lower()
password = request.POST['password']
user = authenticate(username=username, password=password)
payload = dict()
if user is not None:
token, created = Token.objects.get_or_create(user=user)
payload['token'] = token.key
payload ["success"] = True
else:
payload['error'] = "Credentials …Run Code Online (Sandbox Code Playgroud) django ajax google-chrome-extension django-csrf csrf-protection
回购中的相同代码在野外工作正常.但是在我的本地环境中,我在表单提交时遇到了CSRF错误.
Django 1.11.13,Python 2.7
调试非常困难,因为实际上没有任何断点.错误发生在视图之前.
CSRF令牌在表单中{% csrf_token %},隐藏字段在那里,cookie就在那里.
我试过创建一个新的虚拟环境,擦除数据库,不同的浏览器.还有什么?
在我的用户页面中,我使用ajax进行编辑.当我点击编辑时,它工作正常.但是当我提交表格时,它什么也没做.当我检查时,这是错误:
CSRF verification failed. Request aborted.
那么,我如何在我的javascript中放置{%csrf_token%}?请指教.谢谢.
edit.js:
function bookmark_edit() {
var item = $(this).parent();
var url = item.find(".title").attr("href");
item.load("/save/?ajax&url=" + escape(url), null, function () {
$("#save-form").submit(bookmark_save);
});
return false;
}
$(document).ready(function () {
$("ul.bookmarks .edit").click(bookmark_edit);
});
function bookmark_save() {
var item = $(this).parent();
var data = {
url: item.find("#id_url").val(),
title: item.find("#id_title").val(),
tags: item.find("#id_tags").val()
};
$.post("/save/?ajax", data, function (result) {
if (result != "failure") {
item.before($("li", result).get(0));
item.remove();
$("ul.bookmarks .edit").click(bookmark_edit);
}
else {
alert("Failed to validate bookmark before saving.");
} …Run Code Online (Sandbox Code Playgroud) 我将Django从1.8升级到1.9.之后,在Django管理员登录后,我在本地主机上收到此错误:
Referer checking failed - Referer is insecure while host is secure.
生产中的一切都很好.以下是我的settings.py文件的片段:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
Run Code Online (Sandbox Code Playgroud) 我正在进行下面的ajax调用:
var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken': '{{ csrf_token }}'};
$.ajax({
type: 'POST',
url:"/issuebook",
data:data_dict,
processData: false,
contentType: false,
success:function(response)
{
}
});
Run Code Online (Sandbox Code Playgroud)
urls.py是:
urlpatterns = [
url(r'^$',views.checkLogin,name='checklogin'),
url(r'^mylibrary/(?P<pk>\d+)/(?P<user_name>[\w\-]+)$',login_required(views.MyLibrary.as_view()),name='mylibrary'),
url(r'^centrallibrary/(?P<pk>\d+)/(?P<user_name>[\w\-]+)$',login_required(views.CentralLibrary.as_view()),name='centrallibrary'),
url(r'^issuebook$',login_required(views.IssueBookView.as_view()),name='issuebook'),
Run Code Online (Sandbox Code Playgroud)
]
我在ajax调用中收到"Forbidden(CSRF令牌丢失或不正确.):/ issuebook"错误.
ajax调用中的csrf标记呈现为:
var data_dict = {'user':{{ user.id }}, 'bookId':that.id, 'csrfmiddlewaretoken':'fSSdu8dJ4FO6FvDz8eU5ISzOewRYyGbC'};
$.ajax({
type: 'POST',
url:"/issuebook",
data:data_dict,
contentType: false,
success:function(response)
{
}
});
Run Code Online (Sandbox Code Playgroud) 我用一个应用程序、一个模型和一个管理面板开始了一个新的 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 ×10
django-csrf ×10
csrf ×3
ajax ×1
amazon-ec2 ×1
cors ×1
django-1.9 ×1
django-forms ×1
ibm-cloud ×1
javascript ×1
jquery ×1
python ×1
python-3.x ×1