Files
formation-manager-itinova/MIGRATION_AUTH_LOCALE.md

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

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

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

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


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