在Symfony中启用CSRF的功能测试表单

Ste*_*hka 9 forms symfony1 csrf functional-testing

在Symfony中启用CSRF保护的情况下,为测试表单创建功能测试的最佳方法是什么?

目前,我必须在每个表单提交之前添加以下代码:

  $form = new sfGuardFormSignin();
  $token = $form->getCSRFToken();
  $token_name = $form->getCSRFFieldName();
Run Code Online (Sandbox Code Playgroud)

然后我添加$ token和$ token_name来形成如下参数:

call('/login', 'POST', array (
    'signin' => 
    array (
      'username' => $username,
      'password' => $password,
      $token_name => $token,
    )))
Run Code Online (Sandbox Code Playgroud)

文档中建议的选项:

'_with_csrf' => true,
Run Code Online (Sandbox Code Playgroud)

根本不起作用.

是否有更简单的方法可以避免为每个手动测试表单添加令牌?或者有没有办法在运行测试时关闭csrf检查?

当你必须测试1-2个表单时,我上面描述的方式是可以的,但如果项目包含数十个独特的表单,则会变得很痛苦.

Mas*_*one 4

当然,如果直接调用url,则不能使用_with_csrf选项。您必须从表单页面单击“提交”按钮。就像这样:

click('signin', array('signin' => array('username' => $username, 'password' => $password), array('_with_csrf' => true)))
Run Code Online (Sandbox Code Playgroud)

字符串“signin”必须适合您的表单。您还可以使用更独立于标签的字符串,例如“form#myform input[type="submit"]”而不是“signin”,从而调整表单的 ID。

正如已经建议的,您可以禁用 CSRF 登录,这对于修改数据的表单非常有用。