← Blog

7 juillet 2026 · Technique · 4 min de lecture

Supprimer un compte utilisateur proprement avec Supabase et Next.js

Supprimer un compte ne se resume pas a effacer auth.users. Il faut aussi traiter les donnees liees, Storage et l'experience utilisateur.

Paul NoormanFondateur, OurPlan

Supprimer un compte utilisateur proprement avec Supabase et Next.js

Supprimer un compte utilisateur semble simple. En pratique, c'est rarement juste "delete user". Entre l'utilisateur Auth, les donnees liees, le stockage, les sessions et les obligations produit, il faut traiter le sujet proprement.

Avec Supabase et Next.js, le bon objectif n'est pas seulement de supprimer. Le bon objectif est de supprimer sans laisser d'incoherence.

Ce que beaucoup font mal

Le raccourci classique est :

  • appeler une suppression sur l'utilisateur
  • penser que tout le reste va suivre

Le probleme, c'est qu'un compte peut posseder bien plus que sa ligne dans auth.users :

  • des profils
  • des messages
  • des projets
  • des fichiers dans Storage
  • des relations metier
  • des traces utiles a conserver ou anonymiser

Si vous ne cartographiez pas cela, vous supprimez une identite, mais vous laissez un tas de donnees orphelines.

Ce que dit Supabase

La documentation Supabase est claire sur deux points utiles :

  • la suppression admin d'un utilisateur requiert service_role
  • vous ne pouvez pas supprimer un utilisateur s'il est proprietaire d'objets dans Supabase Storage

Il faut donc penser la suppression comme un flux serveur et non comme une simple action front-end.

Suppression, anonymisation ou archivage

Avant d'ecrire du code, il faut choisir la bonne action produit.

Selon le contexte, vous pouvez avoir besoin de :

  • suppression totale : compte et donnees associees effaces
  • anonymisation : les donnees metier restent, mais sans identite directe
  • archivage : le compte n'est plus actif, mais les donnees sont conservees pour une raison legale ou operationnelle

Si vous vendez a des entreprises, ce choix a souvent un impact legal, support et reporting. Il faut donc le definir avant de coder.

Le bon flux serveur

Dans un projet Next.js, le schema le plus propre ressemble a ceci :

  1. l'utilisateur demande la suppression
  2. une route serveur verifie son identite et ses droits
  3. le serveur dresse la liste des donnees a traiter
  4. les fichiers Storage sont supprimes ou reassignes si besoin
  5. les donnees metier sont supprimees ou anonymisees
  6. l'utilisateur Auth est supprime en dernier

Ce dernier point est important. Si vous supprimez l'utilisateur Auth trop tot, vous perdez parfois la coherence du flux et le contexte utile pour finir le nettoyage.

Un exemple de sequence

Dans un portail client classique, une suppression propre peut ressembler a ceci :

  • suppression ou reassignment des objets Storage
  • suppression des lignes enfant qui dependent du compte
  • anonymisation eventuelle des historiques a conserver
  • suppression du profil
  • suppression admin du compte Auth

Supabase propose l'operation de suppression via l'API admin JavaScript :

await supabase.auth.admin.deleteUser(userId)

Cette operation doit rester cote serveur.

Le piege des sessions

Supabase rappelle aussi qu'un JWT peut rester valide jusqu'a son expiration. En pratique, cela veut dire qu'apres suppression, une session peut ne pas disparaitre instantanement du point de vue du navigateur.

Il faut donc prevoir une experience claire :

  • invalider l'acces cote app
  • rediriger proprement l'utilisateur
  • eviter les ecrans ambigus ou les erreurs incomprehensibles

La securite et l'experience utilisateur se rejoignent ici.

Le cas particulier de Storage

C'est un point qu'on oublie souvent.

Si l'utilisateur possede des objets Storage, Supabase peut refuser sa suppression tant que ces objets existent encore. Il faut donc :

  • connaitre le bucket
  • connaitre la logique de proprietaire
  • supprimer ou reassigner les fichiers avant

Si vous sautez cette etape, la suppression echoue et l'equipe pense souvent que "Supabase bug", alors que le comportement est documente.

Une mini checklist avant de brancher le bouton

Avant d'ajouter un bouton "Supprimer mon compte", verifiez :

  1. quelles tables referencent l'utilisateur
  2. quels fichiers Storage lui appartiennent
  3. quelles donnees doivent etre supprimees
  4. quelles donnees doivent etre anonymisees
  5. quelle experience l'utilisateur verra apres la demande

Cette checklist parait simple, mais elle evite beaucoup de dette et de stress support.

Ce qu'il faut retenir

Supprimer un compte utilisateur proprement avec Supabase et Next.js, ce n'est pas juste appeler une methode admin. C'est definir un flux serveur propre, traiter les donnees liees, anticiper Storage, puis gerer la sortie utilisateur avec clarte.

Le bon code commence par une bonne decision produit : qu'est-ce qui doit vraiment disparaitre, qu'est-ce qui doit rester, et qui porte la responsabilite du nettoyage.

Sources officielles

Un projet en tête ?

Un appel de 20 minutes pour comprendre votre projet. Sans engagement.

Supprimer un compte utilisateur proprement avec Supabase et Next.js | OurPlan