Symfony 2. CSRF令牌无效

时间:2015-06-01 22:27:54

标签: php forms symfony

我在Symfony2中遇到令牌表单问题。 (2.7.0)

动作:

public function registerProcessAction(Request $request){
    $form = $this->createForm(new RegistrationType(), new Registration());

    $form->handleRequest($request);

    if ($form->isValid()) {
        die('valid');
    }
    else{
        die('invalid');
    }
}

我的表格:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class'        => 'My\Bundle\Entity\User'
    ));
}

当我测试表单时,始终显示相同的错误:" CSRF令牌无效。请尝试重新提交表单"。我确定输入隐藏在表单中。这是观点:

<?php
echo $view['form']->start($form);
echo $view['form']->widget($form);
echo $view['form']->end($form);
?>

任何人都可以帮助我?

我测试过禁用csrf保护,如下所示:

动作:

$form = $this->createForm(new RegistrationType(), new Registration(), array('csrf_protection' => false));

形式:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class'        => 'My\Bundle\Entity\User',
        'csrf_protection'   => false
    ));
}

但会出现另一个错误:此表单不应包含额外字段。因为令牌的隐藏输入,它已经在形式中了,我不知道要删除它。

三江源!

1 个答案:

答案 0 :(得分:0)

我有一个自定义身份验证提供程序,described here。在Listener的handle()方法的某个时刻,我正在调用$request->getSession()->migrate(),这对我来说是个问题。删除迁移会话的调用解决了问题。

我想知道this was the commit是否破坏了我的身份验证监听器?