现在,我从请求中获得的表单显然将具有SAME Csrf-Token,因为令牌只存在于一个请求中。意思是,每当我做这种动作时,我都必须生成一个新的令牌,但我真的不知道如何做到这一点。
我的假设是我必须做类似
的事情if ($request->isXmlHttpRequest()) {
$form->get('csrf') ->regenerateCsrfToken()
}
但显然这个功能不存在,但它应该是那些线条相似的东西。任何输入将不胜感激
答案 0 :(得分:4)
你试过这个:
if ($request->isXmlHttpRequest()) {
$form->get('csrf')->getCsrfValidator()->getHash(true);
}
getHash(true)
将重新生成哈希值,并将更改后的哈希值存储在生成器中,这样您的表单将在以后从元素中检索时检索新值。
答案 1 :(得分:1)
@MichaelGooden的答案绝对正确。这是解决问题的一般方法。然而,在我所做的内容中,还有另一个错误,也可能与其他用户相关。我的select.onChange()
方法是:
这样做,我也意外地保存了CSRF-Token,并将存储的令牌重新填充为新的令牌。显然这不起作用。因此,在我的form.rePopulate(data)
函数中,我只是排除了CSRF元素,就是它,所有这些都像魅力一样。