Bonjour,
Voila je rencontre un petit problème avec mon code
Je cherche à supprimer un compte
/**
* @Route("/{id}/suppresionProfil", name="profil_suppression", methods={"DELETE"})
*/
public function suppressionProfil(Request $request, User $user): Response
{
if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($user);
$entityManager->flush();
$this->addFlash('sup', 'Votre compte a bien été supprimée');
}
return $this->redirectToRoute('accueil');
}
Je redirige bien l'utilisateur sur la page accueil et voilà l'erreur qui s'affiche :
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.
Pourtant en bdd le compte a bien été supprimé, et si je réactualise la page, je suis bien sur l'accueil
Merci par avance,
Salut,
J'etais dans le même cas que vous. En cherchant un peu j'ai fini par trouver la solution.
vous devez supprimer la session de l'utilisateur :
use Symfony\Component\HttpFoundation\Session\Session;
$session = new Session();
$session->invalidate();
Et pour que l'utilisateur ne se vois plus connecté on peux ajouter la redirection vers le logout
return $this->redirectToRoute( 'security.logout' );
J'ai eu le même problème.
Je l'ai solutionner en supprimant le user "manuellement" par l'administrateur.
Autrement j'ai créer une table "DemandeSuppressionUser" qui a une propriété qui est lié au User qui demande la suppression.
Maintenant s'il y'a une solution pour supprimer l'utilisateur de la session comme le recomande @dubitoph , moi je la veux bien !
Devdeb22, ça veut dire que tu fais travailler un admin ?
c'est une possibilité,
je comprends pourquoi j'ai l'erreur mais je n'ai trouvé aucune doc pour rectifier cela
J'ai même fais une fonction "fantôme" la suppression passe par cette fonction et est juste renvoyée sur la page accueil avec une redirect qui fait un peu une sorte de refresh, je l'avais utilisé pour un problème d'actualisation de notif.
Si je trouve je t'écris qq part
Salut Aka aka et merci pour ta réponse, j'avais laissé en stand by, je viens d'essayer et oui ça marche
merci beaucoup
par contre pourquoi redirectoRoute security.logout ?
Pour ma pars j'ai mis le nom d'utilisateur dans le menu et si je retourne pas sur le logout le nom reste jusqu'au prochain rafrechissement de page.
ah oui je vois, j'ai fais autrement. j'ai mis une condition entre app.user ou pas.
merci beaucoup
Je reviens sur ce sujet : la réponse apportée par aka-aka est loin d'être "propre".
En effet, la création d'un nouvel objet Session contourne le problème et contourne la session déjà gérée par symfony.
Voici la solution que j'ai trouvée et qui permet, entre autre, d'ajouter des messages flash après avoir supprimer le compte utilisateur en injectant le container :
$user = $user->getUser();
$this->container->get('security.token_storage')->setToken(null);
$em->remove($user);
$em->flush();
// Ceci ne fonctionne pas avec la création d'une nouvelle session !
$this->addFlash('success', 'Votre compte utilisateur a bien été supprimé !');
return $this->redirectToRoute('home');