php - Symfony 4 - 如何在控制器中验证我的令牌?
问题描述
在我的控制器的一个函数中,我初始化了一个我将参数传递给视图的表单。然后表单必须重定向到我的控制器的另一个操作,如下所示:
控制器:索引()
/**
* @Route("/validation/absences", name="validation_index")
*/
public function index(PaginatorInterface $paginator, Request $request, AbsenceService $absenceService)
{
$refusAbsence = new Absence();
$formRefus = $this->createForm(RefusAbsenceType::class, $refusAbsence);
$formRefus->handleRequest($request);
return $this->render('validation/index.html.twig', [
"formRefus" => $formRefus->createView(),
]);
我的表单操作转到此功能:
/**
* Refuser une demande d'absence
*
* @Route("validation/absences/refuser/{id}", name="validation_refuser")
*
* @param Absence $absence
* @return void
*/
public function refuser(Request $request, Absence $absence)
{
$token = $request->get('refus_absence')['_token'];
if (!$this->isCsrfTokenValid('refus_absence__token', $token)) {
throw new \Symfony\Component\Security\Core\Exception\AccessDeniedException('Accès interdit');
}
$commentaire = $request->get('refus_absence')['commentaire'];
dd($commentaire);
}
我通过请求取回了我的令牌,但我无法对其进行验证。我仍然有错误。
然而在 Symfony 的文档中,他们说:
if ($this->isCsrfTokenValid('token_id', $submittedToken)) {
// ... do something, like deleting an object
}
在我的 HTML 中,我有:
<input type="hidden" id="refus_absence__token" name="refus_absence[_token]" value="7bbockF5tz3r7Ne9f6dQB7Y5YMcwd1QRES4vHrhQEQE">
解决方案
在您的接收功能中,只需重新创建表单:
$form = $this->createForm(RefusAbsenceType::class, new Absence());
$form->handleRequest($request);
// also checks csrf, it is enabled globally, otherwise, recreate parameters
// in the createForm call.
if($form->isSubmitted() && $form->isValid()) {
$absence = $form->getData();
// do whatever ... persist and stuff ...
}
推荐阅读
- java - 使用 TestNG 7.0.0 获取注释
- javascript - content.match 不是函数
- javascript - 如何使用 npm mp3 转 wav
- spring - 自定义 SOLR 默认响应到自定义搜索响应
- amazon-web-services - 即使 DB 容量不足,DynamoDb 也会限制写入请求
- php - 将输入数据与从数据库查询的数据进行比较
- javascript - 如何用常数乘以每个对象值数组?
- django - 如何在 django url 中创建参数?
- r - 如何旋转 ggplot 中的刻度标签并注释缺失的日期?
- c# - 在没有控制器的情况下将数据传递给 Layout Razor Pages