gpt4 book ai didi

forms - Symfony2 防止多个表单提交

转载 作者:行者123 更新时间:2023-12-04 11:14:41 26 4
gpt4 key购买 nike

我正在使用 Symfony2 制作一个表格。由于 {{ form_rest(myform) }},我有一些实体字段和正确呈现的 csrf token .

问题是 :

  • 用户填写表单并单击提交按钮(然后发布表单)
  • 用户快速按退出键
  • 用户再次点击提交按钮(表单再次发布)

  • 结果:一个实体(表单绑定(bind)到一个实体)在数据库中插入了两次

    这可以无限发生

    我认为使用 CSRF token 字段可以防止这种情况,但事实并非如此。那么有什么方法可以用 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',
    ]);
    }

    对于 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',
    ]);
    }

    然后在您的 Controller 操作中,您可以使用您的 intention 执行类似的操作或 csrf_token_id :
    if ($form->isSubmitted()) {
    // refresh CSRF token (form_intention)
    $this->get("security.csrf.token_manager")->refreshToken("form_intention");
    }

    这可以防止给定表单的双重提交。

    关于forms - Symfony2 防止多个表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24734307/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com