Files
formation-manager-itinova/MIGRATION_AUTH_LOCALE.md

261 lines
7.3 KiB
Markdown

# Migration OAuth Manus vers Authentification Locale
## État de la migration
**Date** : 18 novembre 2024
**Statut** : ⚠️ **En cours** (80% complété)
---
## ✅ Modifications complétées
### 1. Base de données
- ✅ Schéma `users` modifié :
- Ajout du champ `email` (unique, not null)
- Ajout du champ `password` (hash bcrypt, not null)
- Ajout du champ `emailVerified` (boolean, default false)
- Suppression du champ `openId`
- Suppression du champ `loginMethod`
### 2. Backend
- ✅ Installation de `bcrypt` pour le hashage des mots de passe
- ✅ Création des helpers d'authentification (`server/_core/auth.ts`) :
- `hashPassword()` - Hashe un mot de passe avec bcrypt
- `verifyPassword()` - Vérifie un mot de passe
- `generateToken()` - Génère un token JWT
- `verifyToken()` - Vérifie un token JWT
- ✅ Modification du fichier `server/db.ts` :
- `createUser()` - Crée un utilisateur avec email/password
- `getUserByEmail()` - Récupère un utilisateur par email
- `getUserById()` - Récupère un utilisateur par ID
- `updateUserLastSignedIn()` - Met à jour le dernier login
- ✅ Modification du fichier `server/routers.ts` :
- Procédure `auth.register` - Inscription avec email/password
- Procédure `auth.login` - Connexion avec email/password
- Procédure `auth.logout` - Déconnexion (inchangée)
- ✅ Modification du fichier `server/_core/context.ts` :
- Remplacement de l'authentification OAuth par JWT
- Lecture du token depuis le cookie
- Vérification et décodage du token
- Récupération de l'utilisateur depuis la base de données
### 3. Frontend
- ✅ Création de la page `Login.tsx` :
- Formulaire de connexion (email + mot de passe)
- Validation des champs
- Gestion des erreurs
- Redirection après connexion
- Lien vers la page d'inscription
- ✅ Création de la page `Register.tsx` :
- Formulaire d'inscription (nom, email, mot de passe, confirmation)
- Validation des champs (minimum 6 caractères)
- Vérification de la correspondance des mots de passe
- Gestion des erreurs
- Redirection après inscription
- Lien vers la page de connexion
- ✅ Modification du fichier `App.tsx` :
- Ajout des routes `/login` et `/register`
- ✅ Modification du fichier `const.ts` :
- Remplacement de `getLoginUrl()` pour pointer vers `/login`
### 4. Documentation
- ✅ Création du guide de déploiement Linux complet (`GUIDE_DEPLOIEMENT_LINUX.md`)
- ✅ Création de ce document de migration
---
## ⚠️ Modifications restantes
### 1. Correction des erreurs
-**Corriger les doublons dans `server/db.ts`**
- Il reste des fonctions dupliquées qui causent des erreurs de compilation
- Nettoyer complètement les anciennes fonctions OAuth
### 2. Page de gestion des utilisateurs
-**Modifier `AdminUsers.tsx`** :
- Remplacer le champ `openId` par `password` dans le formulaire de création
- Ajouter un champ de changement de mot de passe dans le formulaire d'édition
- Adapter les mutations pour utiliser email au lieu d'openId
### 3. Hooks d'authentification
-**Vérifier `useAuth()`** :
- S'assurer qu'il fonctionne avec la nouvelle authentification JWT
- Pas de modification normalement nécessaire car il utilise `trpc.auth.me`
### 4. Suppression du code OAuth
-**Supprimer les fichiers OAuth inutilisés** :
- `server/_core/sdk.ts` (si existe)
- `server/_core/oauth.ts` (si existe)
- Routes OAuth dans `server/_core/index.ts`
### 5. Variables d'environnement
-**Nettoyer le fichier `.env`** :
- Supprimer `OAUTH_SERVER_URL`
- Supprimer `VITE_OAUTH_PORTAL_URL`
- Supprimer `VITE_APP_ID`
- Supprimer `OWNER_OPEN_ID`
- Garder uniquement :
- `DATABASE_URL`
- `JWT_SECRET`
- `VITE_APP_TITLE`
- `VITE_APP_LOGO`
- Variables email (optionnelles)
---
## 🚀 Prochaines étapes pour finaliser
### Étape 1 : Corriger les erreurs de compilation
```bash
cd /home/ubuntu/formation-manager-itinova
# Vérifier les erreurs
pnpm check
```
Corriger manuellement les doublons dans `server/db.ts`.
### Étape 2 : Modifier la page AdminUsers
1. Ouvrir `client/src/pages/AdminUsers.tsx`
2. Remplacer le champ `openId` par `password` dans le formulaire de création
3. Ajouter un champ de changement de mot de passe (optionnel) dans l'édition
### Étape 3 : Tester localement
```bash
# Compiler
pnpm build
# Démarrer
pnpm start
```
Tester :
1. Inscription d'un nouvel utilisateur
2. Connexion avec cet utilisateur
3. Déconnexion
4. Gestion des utilisateurs (admin)
### Étape 4 : Créer le premier utilisateur admin
Après déploiement, exécuter ce SQL :
```sql
INSERT INTO users (email, password, name, role, emailVerified, isActive, createdAt, updatedAt, lastSignedIn)
VALUES (
'admin@itinova.org',
'$2b$10$N9qo8uLOickgx2ZMRZoMye7FRNv8va91kpMQH6.OfzrcBizxDbvSK', -- Mot de passe: admin123
'Administrateur',
'admin',
TRUE,
TRUE,
NOW(),
NOW(),
NOW()
);
```
⚠️ **Changez immédiatement le mot de passe après la première connexion !**
### Étape 5 : Déployer sur le serveur
Suivre le guide `GUIDE_DEPLOIEMENT_LINUX.md`.
---
## 📋 Checklist de déploiement
### Avant le déploiement
- [ ] Toutes les erreurs de compilation sont corrigées
- [ ] Les tests locaux passent (inscription, connexion, déconnexion)
- [ ] Le fichier `.env` est configuré correctement
- [ ] La base de données est accessible
- [ ] Un utilisateur admin est créé en base de données
### Pendant le déploiement
- [ ] Les fichiers sont copiés sur le serveur
- [ ] Les dépendances sont installées (`pnpm install`)
- [ ] La base de données est initialisée (`pnpm db:push`)
- [ ] L'application est compilée (`pnpm build`)
- [ ] Le service systemd est configuré
- [ ] Le service démarre sans erreur
### Après le déploiement
- [ ] L'application est accessible via le navigateur
- [ ] La connexion fonctionne
- [ ] L'inscription fonctionne
- [ ] Le tableau de bord admin est accessible
- [ ] Les fonctionnalités de gestion des utilisateurs fonctionnent
- [ ] Le mot de passe admin par défaut a été changé
---
## 🔧 Dépannage
### Erreur "Email ou mot de passe incorrect"
- Vérifier que l'utilisateur existe en base de données
- Vérifier que le mot de passe est bien hashé avec bcrypt
- Vérifier les logs du serveur
### Erreur "User is not defined"
- Vérifier que le token JWT est valide
- Vérifier que le cookie est bien envoyé
- Vérifier que `context.ts` récupère bien l'utilisateur
### Erreur "Cannot read property 'id' of null"
- L'utilisateur n'est pas connecté
- Rediriger vers `/login`
### L'application ne démarre pas
- Vérifier les logs : `sudo journalctl -u formation-manager -f`
- Vérifier le fichier `.env`
- Vérifier la connexion à la base de données
---
## 📚 Ressources
- Guide de déploiement : `GUIDE_DEPLOIEMENT_LINUX.md`
- Documentation bcrypt : https://www.npmjs.com/package/bcrypt
- Documentation JWT : https://jwt.io/
- Documentation tRPC : https://trpc.io/
---
## 🆘 Support
En cas de problème :
1. Consulter les logs du serveur
2. Vérifier la base de données
3. Consulter ce document de migration
4. Consulter le guide de déploiement
---
**Note** : Cette migration remplace complètement OAuth Manus par une authentification locale. L'application devient totalement autonome et ne dépend plus de services externes pour l'authentification.