我已经在SO上看到了很多,但是没有什么可以解决我的问题。
问题:
启用CSRF中间件后,Django在AJAX表单请求中回复403,并指出:
“未设置CSRF cookie。”
根据文档,实现了JS功能,该功能设置了自定义
“ X-CSRFToken” 标头。
它按预期工作,从浏览器获取 “ csrftoken” cookie并将其与AJAX请求一起发布:
x-csrftoken: 1a0u7GCQG0wepZHQNThIXeYpMy2lZOf2
但是响应仍然是403。
尝试过的解决方案:
我已经尝试了可以在SO或Web上找到的所有内容,特别是:
检查中间件是否启用:
MIDDLEWARE_CLASSES = [
...
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
]
启用了Cookie的不同浏览器;
用…装饰我的观点@ensure_csrf_cookie
;
设置{% csrf_token %}
我的模板;
使用render
获取正确请求上下文的快捷方式;
设置自定义CSRF_COOKIE_NAME
和CSRF_HEADER_NAME
在我的settings.py
;
明确设置CSRF_COOKIE_SECURE = False
和CSRF_COOKIE_HTTPONLY = False
;
明确设置CSRF_TRUSTED_ORIGINS
设置;
在开发和生产服务器上进行测试;
即使request.META["CSRF_COOKIE_USED"] = True
在我看来,也有人建议。
还是一无所有。
标头:
如果我使用@csrf_exempt
并print(request.META)
在我看来,很明显自定义标头 “ X-CSRFToken”
存在于请求中,并根据Django文档进行格式化,前缀为“ HTTP_”,并用下划线(所有大写字母: “ HTTP_X_CSRFTOKEN”
代替连字符)。
更重要的是,它的值与Django设置的cookie匹配。
饼干:
奇怪的是,如果我尝试print(request.COOKIES)
在页面和表单加载中查看,则可以在其中看到 “ csrftoken”
cookie,但 在AJAX请求上 字典为 空 。可能是问题吗?
拼命寻找真正错误的地方。谢谢您阅读此篇。
好的,问题就很简单了:
默认情况下,提取API不会发送凭据。根据MDN:
Request接口的凭据只读属性指示在跨域请求的情况下,用户代理是否应从其他域发送cookie。这类似于XHR的withCredentials标志,但具有三个可用值。
默认值为omit
,并且从不发送cookie。您只需要same-origin
在fetch()
函数参数中添加:
fetch(formUrl, {
...
credentials: 'same-origin',
...
})
而且你会很好:)
此文件包含上载文件的表单 上传orm.jsp 我的控制器方法是 我上传时出现以下错误: HTTP状态403-在请求参数“\u CSRF”或标头“X-CSRF-Token”上发现无效的CSRF令牌“null” 我也用过Spring安全。但是我总是给出同样的错误。我尝试了很多,但无法解决它。你能帮忙解决这个问题吗?
我试图在vaadin应用程序中实现Spring Security性,但我有一个问题,在登录到页面后,它显示了一个错误: {“status”:403,“error”:“Forbidden”,“message”:“无法验证提供的CSRF令牌,因为找不到您的会话。”,“path”:“/> 我尝试了很多东西,但都不管用,下面是我的标准安全配置类: 控制器类: } 和Vaadin UI类 } 和我的pom.
我正在使用Symfony2。0和FOSUserBundle,并希望在我的登录表单上禁用csrf令牌。 我已经禁用了csrf保护全球在我的网站在我的config.yml: 这工作得很好,没有csrf字段添加到我的表单中。但是,这不适用于登录表单。仅在此表单上,如果我没有将令牌包含在表单中,则会出现“无效的CSRF令牌”错误: 如何在登录表单上禁用CSRF令牌?
使用axios,我尝试为所有请求设置默认标头身份验证令牌。但默认情况下它没有被发现,并且对于任何其他api调用,“授权”没有在标头中设置。 这是一个常用文件 登录后,我像这样设置标题 但是当我调用任何其他API标头进行授权时,CountryApi.js所在的位置没有设置 Country.js是这个
问题内容: 我在网站上启用了CSRF保护,但是CSRF令牌唯一一次放置在隐藏字段中的时间是何时使用。我正在通过ajax发布数据,并且也需要发送CSRF以防止出现500个错误。 我以为有一种方法可以将CSRF令牌显式地嵌入到页面中,但是我似乎找不到它。 如果页面上没有表单,如何获得CSRF令牌? 问题答案: 您可以通过安全性类获取CSRF令牌名称和值:
我正在做简单的身份验证(没有ajax或api),并得到一个CSRF真实性令牌的错误。检查下面的POST请求 根url指向,如下所示 Sign_in页面生成的html视图如下所示: