Lors de la suppression d'un utilisateur sous Symfony, on peut se retrouver avec une erreur assez gênante pour l'utilisateur. Même si le user est bien supprimé de la BDD, le front affiche une jolie erreur comme suit : You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine. Il existe une solution en supprimant le security.token lors de la suppression. Et c'est meme compatible avec les flash messages...
Dans la fonction Delete() de UserController.php vous avez quelque chose comme ça :
#[Route('/{id}', name: 'app_user_delete', methods: ['POST'])]
public function delete(Request $request, User $user, UserRepository $userRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
$userRepository->remove($user);
}
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
Il suffit donc d'ajouter un setToken(null) lors de la suppression du user (avec un flashmessage en prime) :
#[Route('/{id}', name: 'app_user_delete', methods: ['POST'])]
public function delete(Request $request, User $user, UserRepository $userRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
$this->container->get('security.token_storage')->setToken(null);
$userRepository->remove($user, true);
}
$this->addFlash('deleted','Votre compte a été supprimé.');
return $this->redirectToRoute('app_home', [], Response::HTTP_SEE_OTHER);
}
Olivier Prieur
Geek quinqua nivernais fan d'ovalie, de musique, de linuxeries et de Net.
Portfolio : https://www.olivierprieur.fr
Il n'y a actuellement aucun commentaire pour cet article