Files
ferrovia-panel/supabase/EMAIL_SETUP_SELF_HOSTED.md
T
AdminGit 36b0c00cbc V5.0.0 //
-> Refonte du système de login
-> Récupération du MDP
-> Refonte imports d'horaires + Modale de gestion d'horaires
2026-10-01 23:44:09 +02:00

6.5 KiB

Guide de Configuration : Authentification & Envoi d'Emails Supabase Self-Hosted

Ce document détaille la configuration complète pour :

  1. Gérer les profils et permissions sans table dédiée via Supabase Auth (user_metadata).
  2. Configurer l'envoi d'emails SMTP sur une instance Supabase Self-Hosted.
  3. Appliquer le template HTML de réinitialisation de mot de passe.

1. Stockage des Profils et Permissions sans Table Dédiée

Supabase Auth intègre nativement un champ JSONB nommé raw_user_meta_data dans la table système auth.users. L'application Ferrovia Panel utilise désormais ce champ pour stocker les profils utilisateurs et leurs permissions RBAC sans nécessiter de table public.utilisateurs.

Structure des Métadonnées Utilisateur (user_metadata)

{
  "nom": "Dupont",
  "prenom": "Jean",
  "name": "Jean Dupont",
  "role": "admin",
  "permissions": {
    "dashboard": { "read": true, "create": true, "update": true, "delete": true },
    "gares": { "read": true, "create": true, "update": true, "delete": true },
    "horaires": { "read": true, "create": true, "update": true, "delete": true }
  },
  "region_admin": false,
  "region_id": null,
  "region_nom": null,
  "actif": true
}

Consultation et Modification directe depuis Supabase (SQL)

Si vous souhaitez attribuer le rôle administrateur ou des permissions personnalisées à un utilisateur directement en base de données :

-- Mettre à jour les métadonnées d'un utilisateur existant :
UPDATE auth.users
SET raw_user_meta_data = jsonb_build_object(
  'nom', 'Administrateur',
  'prenom', 'Principal',
  'name', 'Principal Administrateur',
  'role', 'admin',
  'actif', true,
  'permissions', '{
    "dashboard": {"read": true, "create": true, "update": true, "delete": true},
    "gares": {"read": true, "create": true, "update": true, "delete": true},
    "materiel_roulant": {"read": true, "create": true, "update": true, "delete": true},
    "horaires": {"read": true, "create": true, "update": true, "delete": true},
    "fiches_horaires": {"read": true, "create": true, "update": true, "delete": true},
    "lignes": {"read": true, "create": true, "update": true, "delete": true},
    "services": {"read": true, "create": true, "update": true, "delete": true},
    "quais": {"read": true, "create": true, "update": true, "delete": true},
    "informations": {"read": true, "create": true, "update": true, "delete": true},
    "perturbations": {"read": true, "create": true, "update": true, "delete": true},
    "travaux": {"read": true, "create": true, "update": true, "delete": true},
    "menu": {"read": true, "create": true, "update": true, "delete": true},
    "pages": {"read": true, "create": true, "update": true, "delete": true},
    "tarifs": {"read": true, "create": true, "update": true, "delete": true},
    "messagerie": {"read": true, "create": true, "update": true, "delete": true},
    "parametres": {"read": true, "create": true, "update": true, "delete": true},
    "utilisateurs_global": {"read": true, "create": true, "update": true, "delete": true},
    "annonces_sonores": {"read": true, "create": true, "update": true, "delete": true},
    "systeme_maj": {"read": true, "create": true, "update": true, "delete": true}
  }'::jsonb
)
WHERE email = 'votre-email@domaine.com';

2. Configuration SMTP sur Supabase Self-Hosted (Docker)

Sur votre serveur hébergeant Supabase (ex: avec Docker Compose), éditez le fichier .env du dossier Supabase.

Variables d'environnement pour l'envoi de mail (GoTrue / Auth)

## Configuration Générale du Site
SITE_URL=https://votre-domaine.fr
ADDITIONAL_REDIRECT_URLS=https://votre-domaine.fr/reinitialiser-mot-de-passe,http://localhost:3000/reinitialiser-mot-de-passe

## Activation du Serveur SMTP
GOTRUE_SMTP_HOST=smtp.votre-fournisseur.com
GOTRUE_SMTP_PORT=587
GOTRUE_SMTP_USER=votre-utilisateur-smtp
GOTRUE_SMTP_PASS=votre-mot-de-passe-smtp
GOTRUE_SMTP_ADMIN_EMAIL=noreply@votre-domaine.fr
GOTRUE_SMTP_SENDER_NAME="Ferrovia Panel"

## Paramètres des liens d'authentification
GOTRUE_MAILER_AUTOCONFIRM=false
GOTRUE_MAILER_URLPATHS_RECOVERY=/reinitialiser-mot-de-passe

Note Fournisseurs SMTP recommandés : Brevo (ex-Sendinblue), Mailjet, Resend, Amazon SES ou un serveur Postfix dédié.


3. Installation du Template Email de Réinitialisation

Le template email responsive Ferrovia est situé dans : supabase/templates/recovery.html

Option A : Via Supabase Studio (Interface Web)

  1. Rendez-vous sur votre interface Supabase Studio (https://votre-supabase/project/default/auth/templates).
  2. Allez dans Authentication > Email Templates.
  3. Sélectionnez l'onglet Reset Password.
  4. Dans le champ Subject, indiquez : Réinitialisation de votre mot de passe - Ferrovia Panel
  5. Copiez-collez l'intégralité du code HTML du fichier supabase/templates/recovery.html dans le champ Body.
  6. Cliquez sur Save changes.

Option B : Montage Docker (GoTrue)

Si votre déploiement Docker utilise des fichiers de templates montés :

  1. Dans docker-compose.yml, montez le template dans le conteneur auth :
    auth:
      image: supabase/gotrue:...
      volumes:
        - ./templates/recovery.html:/etc/gotrue/templates/recovery.html:ro
      environment:
        GOTRUE_MAILER_TEMPLATES_RECOVERY: /etc/gotrue/templates/recovery.html
    
  2. Redémarrez le conteneur auth :
    docker compose restart auth
    

4. Parcours Utilisateur dans l'Application

  1. Page de Connexion (/) :

    • L'utilisateur clique sur "Mot de passe oublié ?".
    • Si un email était déjà tapé, il est automatiquement pré-rempli sur la page de réinitialisation.
  2. Page de Réinitialisation (/reinitialiser-mot-de-passe) - Étape 1 :

    • L'utilisateur saisit son adresse email professionnelle.
    • L'application appelle supabase.auth.resetPasswordForEmail(email, { redirectTo }).
    • Supabase génère un token sécurisé et expédie l'email avec le template personnalisé.
  3. Email Reçu :

    • L'utilisateur clique sur "Définir mon nouveau mot de passe".
    • Le lien redirige vers https://votre-domaine.fr/reinitialiser-mot-de-passe#access_token=...&type=recovery.
  4. Page de Réinitialisation - Étape 2 :

    • L'application détecte le mode récupération (type=recovery).
    • L'utilisateur saisit son nouveau mot de passe (min. 8 caractères) et confirme.
    • L'application appelle supabase.auth.updateUser({ password }).
    • Message de confirmation et redirection automatique vers la connexion.