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

153 lines
6.5 KiB
Markdown

# 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.