7.3 KiB
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
usersmodifié :- 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
- Ajout du champ
2. Backend
-
✅ Installation de
bcryptpour le hashage des mots de passe -
✅ Création des helpers d'authentification (
server/_core/auth.ts) :hashPassword()- Hashe un mot de passe avec bcryptverifyPassword()- Vérifie un mot de passegenerateToken()- Génère un token JWTverifyToken()- Vérifie un token JWT
-
✅ Modification du fichier
server/db.ts:createUser()- Crée un utilisateur avec email/passwordgetUserByEmail()- Récupère un utilisateur par emailgetUserById()- Récupère un utilisateur par IDupdateUserLastSignedIn()- 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)
- Procédure
-
✅ 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
/loginet/register
- Ajout des routes
-
✅ Modification du fichier
const.ts:- Remplacement de
getLoginUrl()pour pointer vers/login
- Remplacement de
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
openIdparpassworddans 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
- Remplacer le champ
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_URLJWT_SECRETVITE_APP_TITLEVITE_APP_LOGO- Variables email (optionnelles)
- Supprimer
🚀 Prochaines étapes pour finaliser
Étape 1 : Corriger les erreurs de compilation
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
- Ouvrir
client/src/pages/AdminUsers.tsx - Remplacer le champ
openIdparpassworddans le formulaire de création - Ajouter un champ de changement de mot de passe (optionnel) dans l'édition
Étape 3 : Tester localement
# Compiler
pnpm build
# Démarrer
pnpm start
Tester :
- Inscription d'un nouvel utilisateur
- Connexion avec cet utilisateur
- Déconnexion
- Gestion des utilisateurs (admin)
Étape 4 : Créer le premier utilisateur admin
Après déploiement, exécuter ce 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
.envest 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.tsré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 :
- Consulter les logs du serveur
- Vérifier la base de données
- Consulter ce document de migration
- 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.