我在DJango中遇到了问题。我正在尝试将数据发送到DJango中的SQL数据库。所以我需要我的令牌,我通过{{ csrf_token }}获得了令牌。但是当我在HTML网站上发送数据时,它告诉我POST 403被禁止,并且DJango终端显示NotFound:/favicon.ico以及Forbidden(来自POST的CSRF标记的长度不正确。):/安装/
有没有人能解决这个问题?下面是我用来请求令牌的代码。
谢谢你!
let formData = new FormData();
formData.append("name", name);
formData.append("gewinde", gewinde);
formData.append("laenge", laenge);
formData.append("durchmesser", durchmesser);
//formData.append("containerNR", containerNR);
formData.append('csrfmiddlewaretoken', token);
fetch('/ausgeben/',{
method: 'POST',
body: formData
});
2条答案
按热度按时间ctehm74n1#
尝试在
fetch
头中发送csrftoken
而不是在请求的主体中发送。免责声明我没有在fetch
中使用过这个,但是在JQuery和$.ajax
请求中是必要的。pnwntuvh2#
TL;DR添加一个图标.ico
长版本:
搜索更多关于CSRF问题的主题,我找到了这一个。
我认为您正面临着CSRF和一些浏览器的一个老问题(但似乎仍然有效)。它通常与favicon.ico文件有关,但也可能发生在其他静态资源(如javacript sourcemap *.map文件)上。
访问页面后,浏览器会请求favicon. ico。如果该文件不存在并且该请求由框架处理,则可能会导致生成新的CSRF令牌,从而使表单上的令牌无效。
引用另一句话:
1.当用户登录到PHP页面时,会分配一个会话cookie。当用户访问登录页面时,CSRF令牌与会话相关联。
1.但由于请求看起来像是针对静态资源,Varnish在将其传递回Apache/PHP之前剥离了cookie,这意味着PHP发布了一个新的会话来替换旧的会话。
https://news.ycombinator.com/item?id=3590328