V5.0.0 //
-> Refonte du système de login -> Récupération du MDP -> Refonte imports d'horaires + Modale de gestion d'horaires
This commit is contained in:
1 parent
d89eaaa17f
commit
36b0c00cbc
23 files changed
+5557
-1399
No files matched your search
@@ -0,0 +1,152 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user