禁止403:Firefox中的CSRF验证失败错误,而不是chrome

我有一个包含POST的多个表单的网页 . 我在每个表单中都包含了{%csrf_token%} .

<form class="form-horizontal clearfix" role="form" id="Form1" method="post"> {% csrf_token %}

在我看来,我使用了bot ensure_csrf_cookie和csrf_protect装饰器

@ensure_csrf_cookie
@csrf_protect
@operation('monitor')
def monitor(request, **kwargs):

第一个POST请求从后端获取一些详细信息并将其显示在UI中 . 之后,从用户请求一些数据,然后提交第二个表单 .

在firefox中:当我第一次加载页面时,在第一篇文章之后,csrftoken是X.对于第二个post请求,csrftoken cookie也是相同的 . 但是一旦抛出错误,csrf cookie就会变为不同的值 . 如果我在此之后刷新页面,则csrftoken保持不变,如果我再次发布请求,则成功 . 我还验证了表单有隐藏值csrfmiddlewaretoken . 这与cookie匹配 . 加载页面时,我没有看到任何404 for favicon . 这是以前的事 . 但我解决了这个问题,并且chrome开始工作 .

在chrome:这是有效的 .

关于如何解决这个问题的任何指针?

回答(1)

2 years ago

这是favicon.ico找不到的错误 . 我在base.html中添加了这个 .

<link rel="shortcut icon" type="image/png" href="{% static "tools/ico/favicon.ico" %}"/>

参考:https://code.djangoproject.com/ticket/28488#comment:22