Inscription sur invitation uniquement

Ferme l'auto-inscription publique : l'app repose désormais sur le
mécanisme d'invitation natif de Supabase (Authentication → Users →
Invite user) plutôt que sur un formulaire /signup ouvert à tous.

- /login : retire le lien « Créer un compte ».
- /signup : entièrement repensée. Ce n'est plus un formulaire d'auto-
  inscription (email + mot de passe) mais une page de FINALISATION de
  compte invité. Au montage, vérifie s'il existe une session (établie
  par le clic sur le lien d'invitation reçu par email) :
    * pas de session → message « invitation requise » ;
    * session + profil déjà finalisé (pseudo réel, pas le défaut
      "Nouveau membre" posé par le trigger handle_new_user) → redirige
      directement vers le leaderboard ;
    * session + profil à finaliser → formulaire pseudo + mot de passe
      + photo, qui appelle `updateUser({ password })` puis met à jour
      `profiles` (au lieu de `signUp()`).
- proxy : /signup retiré de AUTH_PATHS — un compte fraîchement invité a
  déjà une session active et doit pouvoir rester sur cette page pour la
  finaliser, sans être renvoyé au leaderboard par le redirect prévu pour
  les utilisateurs déjà connectés.
- README/CLAUDE.md : documentent la désactivation de "Allow new users
  to sign up", la configuration Site URL/Redirect URLs (→ /signup) pour
  que le lien d'invitation atterrisse au bon endroit, et le flux
  d'invitation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-07-26 18:08:03 +02:00
parent a807c4c85e
commit 36adb143ca
5 changed files with 89 additions and 76 deletions
+1 -1
View File
@@ -76,7 +76,7 @@ Ce pattern (RLS pour l'accès à la ligne + trigger `BEFORE UPDATE` pour l'accè
## 4. Authentification
Email + mot de passe (Supabase Auth impose l'unicité de l'email). Confirmation d'email **activée** — nécessite un SMTP custom configuré côté Supabase (le service intégré est trop limité en volume, voir README). Le pseudo est un simple nom d'affichage stocké dans `profiles`, jamais l'email n'est montré aux autres membres.
**Sur invitation uniquement**, plus d'auto-inscription publique : "Allow new users to sign up" est désactivé côté Supabase. Un Archonte invite via Authentication → Users → Invite user ; le lien reçu établit une session directement sur `/signup`, qui sert alors à finaliser le compte (mot de passe, pseudo, photo) — sans session valide, la page affiche un message « invitation requise ». Le profil est créé dès l'invitation par le trigger `handle_new_user` (pseudo temporaire `"Nouveau membre"` jusqu'à finalisation). Nécessite un SMTP custom côté Supabase (le service intégré est trop limité en volume, voir README). Le pseudo est un simple nom d'affichage stocké dans `profiles`, jamais l'email n'est montré aux autres membres.
---