Bil*_*il5 4 forms submit csrf symfony
我正在使用 Symfony2 处理表单。我有一些实体字段和一个 csrf 令牌,由于{{ form_rest(myform) }}
.
问题是 :
结果:一个实体(表单绑定到一个实体)在数据库中插入了两次
这可以无限发生
我认为使用 CSRF 令牌字段可以防止这种情况,但事实并非如此。那么有没有什么办法可以用 Symfony 框架在本地解决这个问题呢?如果不是,存在哪些可能性?
先感谢您!
我不确定这是否是正确的方法,但您可以执行以下操作。
在您的 中FormType
,设置以下选项:
对于 Symfony < 4 使用intention
:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'csrf_protection' => true,
'csrf_field_name' => '_token',
// important part; unique key
'intention' => 'form_intention',
]);
}
Run Code Online (Sandbox Code Playgroud)
对于 Symfony >= 4 使用csrf_token_id
:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'csrf_protection' => true,
'csrf_field_name' => '_token',
// important part; unique key
'csrf_token_id' => 'form_intention',
]);
}
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器操作中,您可以使用您的intention
或执行以下操作csrf_token_id
:
if ($form->isSubmitted()) {
// refresh CSRF token (form_intention)
$this->get("security.csrf.token_manager")->refreshToken("form_intention");
}
Run Code Online (Sandbox Code Playgroud)
这可以防止给定表单的双重提交。