如果用户点击在目标网页上提交表单,则会将其转到另一个页面(第二页),但如果用户尝试通过另一个表单帖子登录第二页,则用户会收到403禁止错误。
着陆页表单有效。 登录表单工作正常。 但是提交登录页面表单然后登录表单导致403 CSRF验证失败。
第一页上的表单返回:
render(request, 'page.html', context_var)
css的表格无效:
<form action="{% url 'url_test' %}" method="POST">
<input type="hidden" name="some_name" value="for_view_use">
{% csrf_token %}
<button type="submit" name="other_name" value="value">button</button>
</form>
第二种形式或允许用户登录的视图返回:
HttpResponse('success')
并且css的登录表单为:
<form action="{% url 'login' %}" method="post">
{% csrf_token %}
<input type="text" name="username">
<input type="password" name="password">
<button type="submit">Sign In</button>
</form>
我确信这两个视图都会返回这些值,因为我已单独测试它们。
我尝试过使用@csrf_protect
,但这并没有奏效。我已经检查过,加载后第二页上会出现令牌。我知道它与csrf令牌有关,但我无法弄明白。
对我来说,好像第一个表单没有为下一页返回一个可接受的csrf标记。
编辑: 我没有解决问题本身,但我注意到第一个请求只是从服务器提取数据,所以我将其更改为GET请求,并且错误停止发生。在我看来,这不是一个答案所以我将保持这个线程打开,以防其他人在使用django连续表单POST请求时遇到问题。