Symfony (5, 6) : suppression utilisateur - Erreur

Symfony (5, 6) : suppression utilisateur - Erreur

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);
    }
citizenz7
Posté par citizenz7

Geek quinqua nivernais fan d'ovalie, de linuxerie, de musique et de Net

0 commentaire

Laisser un commentaire

Votre adresse email ne sera pas publiée.

Email:
Pseudo:
Message:
Accepter les CGU
Recopiez le code antispam: