如何在Symfony中禁用CSRF?

8
我使用了以下代码,并且它也具有 csrf 功能。但是我该如何禁用它的 csrf?我进行了搜索,Disable CSRF token on login form 没有帮助,因为在我的情况下没有使用 createFormBuilder(),那么我该怎么办?
$csrfStorage = new NativeSessionTokenStorage();
$csrfGenerator = new UriSafeTokenGenerator();
$csrfManager = new CsrfTokenManager($csrfGenerator, $csrfStorage);

$formFactory = Forms::createFormFactoryBuilder()
    ->addExtension(new CsrfExtension($csrfManager))
    ->getFormFactory();


$defaultFormTheme = 'bootstrap_3_layout.html.twig';

$vendorDir = realpath(__DIR__.'/../vendor');
$appVariableReflection = new \ReflectionClass('\Symfony\Bridge\Twig\AppVariable');
$vendorTwigBridgeDir = dirname($appVariableReflection->getFileName());
$viewsDir = realpath('twig');

$twig = new Twig_Environment(new Twig_Loader_Filesystem(array(
    $viewsDir,
    $vendorTwigBridgeDir.'/Resources/views/Form',
)));
$formEngine = new TwigRendererEngine(array($defaultFormTheme), $twig);
$twig->addRuntimeLoader(new \Twig_FactoryRuntimeLoader(array(
    TwigRenderer::class => function () use ($formEngine, $csrfManager) {
        return new TwigRenderer($formEngine, $csrfManager);
    },
)));
$twig->addExtension(new FormExtension());

$translator = new Translator('en');
$twig->addExtension(new TranslationExtension($translator));
$form = $formFactory->createBuilder()
    ->add('task', TextType::class)
    ->add('dueDate', DateType::class)
    ->getForm();

$request = Request::createFromGlobals();
$form->handleRequest();
if ($form->isSubmitted() && $form->isValid()) {
    $data = $form->getData();
    print_r($data);
}

$twig->display('new.html.twig', array(
    'form' => $form->createView(),
));

将您的构建器部分更新为createBuilder('',null,['csrf_protection' => false]) - Mert Öksüz
1
我收到错误0:无法加载类型“”。我猜是因为第一个参数不能为空?我应该传入什么? - Joe Hark
你应该传递FormType,即你自己创建的表单类型。 - Mert Öksüz
如果您想禁用所有的csrf保护,请将config.yml框架csrf_protection设置为false。但是,如果您不需要csrf保护,我真的不明白为什么要添加csrf管理器。 - Cerad
2个回答

16
$form = $formFactory->createBuilder('Symfony\Component\Form\Extension\Core\Type\FormType', null,  array('csrf_protection' => false))

6

如果您希望全局禁用所有表单(例如,您想要实现自己的逻辑),可以在config/packages/framework.yaml中进行设置。

framework:
  form:
    csrf_protection:
      enabled: false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接