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