Symfony 4 - Как проверить мой токен в контроллере? - PullRequest
0 голосов
/ 25 сентября 2019

в функции моего контроллера я инициализирую форму, которую передаю параметру в представление.Затем форма должна перенаправить на другое действие моего контроллера, например:

Контроллер: index ()

/**
     * @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">

1 Ответ

1 голос
/ 25 сентября 2019

в вашей функции получения, просто воссоздайте форму:

$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 ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...