【发布时间】:2012-09-11 19:22:06
【问题描述】:
我想在同一模块中从动作 a 重定向到动作 b。 Action 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' 以重定向参数,如 link_to() ,但没有任何效果,我也无法在网络上找到任何关于它的信息。 API 文档说明了这一点。我得到的只是
500 | Internal Server Error | sfValidatorErrorSchema
_csrf_token [Required.]
错误。它在标记为//morte 的行上失败。请问有谁知道如何正确执行此操作,以及在我想重定向到其他模块的情况下?
【问题讨论】:
-
_csrf_token仅用于表单。您要转发表格吗? -
_csrf_token也用于带有某些方法的锚点。url_for('module/action' , array('method' => 'post')例如就是这样做的。检查这样一个锚的html。我在操作中使用$request->checkCSRFProtection(),我不想仅仅通过输入网址就可以访问。回答您的问题:不,我不转发表格。我只希望在处理完表单后触发受 csrf 保护的操作。 -
这对我来说还不清楚..
-
我会更详细地重写问题
-
现已编辑。谢谢你的回答
标签: php redirect symfony-1.4