0

我想在同一个模块中从一个动作重定向到另一个a动作。b动作b需要 csrf 令牌才能执行,我还需要传递一些参数。

行动一:

public function executeA(sfWebRequest $request){

   //... do stuff

   $this->redirect('module/b?id='.$something->getId());

}

行动 b:

public function executeB(sfWebRequest $request){

   $request->checkCSRFProtection(); //morte

   $something_id = $request->getParameter('id');
   //... do stuff

}

b仅当单击由或任何其他方法创建的锚时,该操作才会执行,link_to('module/b?id='.$something.getId() , array('method' => 'post'))因为它会随请求发送 csrf 令牌。

我尝试了各种方法,$this->forward()$this->redirect()尝试添加'method' => 'post'重定向参数,如 in link_to(),但没有任何效果,我也无法在网上找到任何关于它的信息。API 文档说明了这一点。我得到的只是

 500 | Internal Server Error | sfValidatorErrorSchema
_csrf_token [Required.]

错误。它在标记的行上失败//morte。请问,有谁知道如何正确执行此操作,以及在我想重定向到其他模块的情况下?

4

1 回答 1

2

好的,现在更清楚了。

事实是_csrf_token不是重定向到其他操作,我的意思是,您没有在查询中重新添加它。

尝试:

public function executeA(sfWebRequest $request){

   //... do stuff

   $this->redirect('module/b?id='.$something->getId().'?_csrf_token='.$request->getParameter('_csrf_token'));

}
于 2012-09-12T12:09:04.770 回答