261 lines
7.3 KiB
Markdown
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.
|