当前位置: 首页>>WEB开发>>正文


在ajax submit上禁用symfony 2 csrf令牌保护

天罡 WEB开发 , , 去评论

问题描述

我正在建立一个通过webservices与我的symfony2应用程序交谈的移动应用程序我找不到一种方法来禁用特定控制器/操作上的csrf保护

我想将注册数据发布到此操作并使用sf2表单验证。我不会在我的手机应用程序中调用该表单

无法更改容器参数的操作,抛出异常,因为它是一个冻结参数…

我不想为整个我的应用程序禁用表单保护

任何线索?

谢谢 !

更新:与symfony 2.1.x

/**
 * {@inheritdoc}
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'csrf_protection'   => false,
    ));
}

最佳解决方案

如果您正在寻找一个比上面回答的建议更容易和更快的解决方案,那么如何:

<?php

// ...

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\OptionsResolver\OptionsResolver;

class MyType extends AbstractType
{
    // ...

   public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection' => false,
        ));
    }
}

..或者如果你使用Symfony 2.0。*:

<?php

// ...

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class MyType extends AbstractType
{
    // ....

    public function getDefaultOptions(array $options)
    {
        $options = parent::getDefaultOptions($options);
        $options['csrf_protection'] = false;

        return $options;
    }
}

有关其他信息,请咨询Symfony documentation


编辑:更新最新Symfony版本的答案,谢谢naitsirch

次佳解决方案

使用表单工厂

对于那些想要在控制器中创建简单表单的人:

$form = $this->container->get('form.factory')
    ->createNamedBuilder(null, 'form', null, array('csrf_protection' => false))
    ->add('yourField','text', array(
        'label' => false,
        'mapped' => false
    ))
    ->getForm();

第三种解决方案

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'csrf_protection' => false,
    ]);
}

参考文献

注:本文内容整合自google/baidu/bing辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:gxnotes#qq.com(#替换为@)。

本文由《共享笔记》整理, 博文地址: https://gxnotes.com/article/91667.html,未经允许,请勿转载。
Go