# 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`) ```json { "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 : ```sql -- 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) ```env ## 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` : ```yaml 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 : ```bash 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.