【问题标题】:Symfony Form, CSRF token missingSymfony 表单,缺少 CSRF 令牌
【发布时间】:2013-12-02 22:08:37
【问题描述】:

就像在主题中一样,我遇到了 CSRF 令牌丢失的问题。这是我的表格:

$builder
            ->add('email', 'email', array(
                'label' => 'Adres e-mail'
            ))
            ->add('userFirstname', 'text', array(
                'label' => 'Imię',
                'required' => false
            ))
            ->add('userLastname', 'text', array(
                'label' => 'Nazwisko',
                'required' => false
            ))
            ->add('userBusiness', 'entity', array(
                'label' => 'Firma',
                'required' => false,
                'class' => 'Cloud\CrmBundle\Entity\RelationContact',
                'query_builder' => function(EntityRepository $er) {
                    return $er->createQueryBuilder('u')->where("u.type = 'b'");
                },
                'empty_value' => true
            ))
            ->add('old_password', 'password', array(
                'label' => 'Stare hasło',
                'mapped' => false,
                'required' => false
            ))
            ->add('new_password', 'repeated', array(                
                'first_options' => array(
                    'label' => 'Nowe hasło'),
                'second_options' => array(
                    'label' => 'Powtórz nowe hasło'),
                'mapped' => false,
                'required' => false,
                'type' => 'password'
            ));

我的看法:

<div class="form-horizontal">
            {{ form_row(form.email) }}
            {{ form_row(form.userFirstname) }}
            {{ form_row(form.userLastname) }}
            {{ form_row(form.userBusiness) }}
        {{ form_row(form.old_password) }}
        {{ form_row(form.new_password) }}
        </div>
</div>

大家怎么了?有任何想法吗? :( 我只是不明白这个奇怪的错误......可能是什么原因导致的?

【问题讨论】:

  • 很简单,你需要拨打{{ form_rest(form) OR {{ form_widget(form._token) }}
  • ... 或将表单参数csrf_protection 设置为FALSE 以完全禁用CSRF检查......

标签: symfony field token csrf


【解决方案1】:

如果您使用form_startform_end,symfony 会自动将令牌字段添加到表单中

<div class="form-horizontal">
    {{ form_start(form) }}
        {{ form_row(form.email) }}
        {{ form_row(form.userFirstname) }}
        {{ form_row(form.userLastname) }}
        {{ form_row(form.userBusiness) }}
        {{ form_row(form.old_password) }}
        {{ form_row(form.new_password) }}
    {{ form_end(form) }}
</div>

【讨论】:

    【解决方案2】:

    您可能必须手动添加此 _token,因为您尝试手动显示表单:

    {{ form_widget(form._token) }}
    

    【讨论】:

      【解决方案3】:

      Symfony2 设置一个包含所需信息的隐藏字段。为此,您必须包含以下隐藏字段:

      {{ form_widget(form._token) }}
      

      如果您不想要 CSRF-Protection,那么您可以在参数文件中禁用该功能。

      Disable symfony 2 csrf token protection on ajax submit

      【讨论】:

        猜你喜欢
        • 2019-07-28
        • 2017-07-27
        • 1970-01-01
        • 1970-01-01
        • 2020-02-10
        • 2017-01-08
        • 2019-06-01
        • 1970-01-01
        • 2013-04-12
        相关资源
        最近更新 更多