Проблема Symfony 3 с аутентификацией пользователя, когда форма редактирования пользователя недействительна - PullRequest
0 голосов
/ 10 января 2019

Когда форма редактирования пользователя отправлена ​​и недействительна, токен безопасности изменяется, а затем перенаправляет меня на вход в систему, потому что нет пользователя с этим новым токеном безопасности.

Я пытался решить этот вопрос: Проблема аутентификации Symfony после изменения имени пользователя , но она не работает для меня, возможно, я что-то не так делаю.

public function userEditProfileAction(Request $request)
{
    $user = $this->get('security.token_storage')->getToken()->getUser();
    if ($user instanceof User && $user->hasRole('ROLE_USER'))
    {
        $basicForm = $this->createForm(UserEditBasicInfoType::class, $user);


        $additionalData = $this->getDoctrine()->getRepository(UserAdditionalData::class)->findOneByUser($user);
        $additionalForm = $this->createForm(UserAdditionalDataType::class, $additionalData);

        $notificationInfoData = $this->getDoctrine()->getRepository(NotificationInfo::class)->findOneByUser($user);
        $notificationInfoForm = $this->createForm(NotificationInfoType::class, $notificationInfoData);

        $basicForm->handleRequest($request);
        $additionalForm->handleRequest($request);
        $notificationInfoForm->handleRequest($request);

        if (($basicForm->isSubmitted() && $basicForm->isValid()) ||
            ($additionalForm->isSubmitted() && $additionalForm->isValid()) ||
            ($notificationInfoForm->isSubmitted() && $notificationInfoForm->isValid())
        )
        {
            $this->getDoctrine()->getManager()->flush();

            $this->addFlash('success', 'Pomyślnie zmioniono dane.');

            $this->redirectToRoute('user_profile');
        }

        return $this->render('FrontBundle:Default:user-profile.html.twig', array(
            'user' => $user,
            'additional_data' => $additionalData,
            'notification_info_data' => $notificationInfoData,
            'basic_form' => $basicForm->createView(),
            'additional_form' => $additionalForm->createView(),
            'notification_info_form' => $notificationInfoForm->createView()
        ));
    } else
    {
        return $this->redirectToRoute('user_login');
    }
}

Как избежать этого и заставить пользователя все еще входить в систему со старым токеном?

EDIT: Я решил эту проблему с обновлением текущего пользователя, когда форма недействительна, как это:

   if (($basicForm->isSubmitted() && $basicForm->isValid()) ||
            ($additionalForm->isSubmitted() && $additionalForm->isValid()) ||
            ($notificationInfoForm->isSubmitted() && $notificationInfoForm->isValid())
        )
        {
            ...
        } else {
            $this->get('doctrine')->getManager()->refresh($this->getUser());
        }
...