如果包含两种形式会影响我的CSRF令牌使用?

nma*_*rko 5 django post django-csrf

我正在尝试创建一个包含两个表单的页面:一个在页面加载时可见(一个登录表单),另一个在用户单击按钮(注册表单)时出现在模态中.

我正在使用Django,虽然我仍然在弄清楚如何处理这些表单,但我最关心的是CSRF令牌将如何发挥作用.例如,我应该{% csrf_token %}只使用其中一个<form></form>标签,还是应该将它放在两个标签中?

此外,如果我在两种形式中都使用它,这会以任何方式影响我对服务器的POSTS吗?目前,我正在以一种形式获取数据(取决于单击的提交按钮)并以这种方式进行POST:

var data={
    'username':$('#username').val(), 
    'password':$('#password').val(),
    'csrfmiddlewaretoken': '{{ csrf_token }}'
}

$.post("/", signin_data);
Run Code Online (Sandbox Code Playgroud)

kar*_*ikr 5

csrf_token应该放在两个表单中,只要在服务器端通过GET或访问它们POST,并且是,您可以csrf_token对这两个表单使用相同而没有任何问题.

你可以做点什么

<form action="." >{% csrf_token %}
    {{form1.as_p}}
</form>
Run Code Online (Sandbox Code Playgroud)

当你这样做时data=form.serialize(),csrf令牌会自动在dataajax请求中序列化.

多个{% csrf_token %}工作的原因是因为所有令牌都提供了用于验证表单请求来自有效(未被篡改)的用户会话的信息.