Когда форма редактирования пользователя отправлена и недействительна, токен безопасности изменяется, а затем перенаправляет меня на вход в систему, потому что нет пользователя с этим новым токеном безопасности.
Я пытался решить этот вопрос: Проблема аутентификации 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());
}