-> Refonte du système de login -> Récupération du MDP -> Refonte imports d'horaires + Modale de gestion d'horaires
153 lines
6.5 KiB
Markdown
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.
|