Checkpoint: Version finale avec authentification locale corrigée : utilisation de sdk.createSessionToken() et configuration SameSite=Lax pour compatibilité HTTP

This commit is contained in:
Manus Sandbox
2025-11-23 10:10:13 -05:00
parent 645f6f6b5f
commit f9d1f21011
4 changed files with 417 additions and 0 deletions

68
.env.production.template Normal file
View File

@@ -0,0 +1,68 @@
# ============================================================================
# CONFIGURATION DE PRODUCTION - Formation Manager Itinova
# ============================================================================
# ----------------------------------------------------------------------------
# Base de données
# ----------------------------------------------------------------------------
DATABASE_URL=mysql://utilisateur:motdepasse@localhost:3306/formation_manager
# ----------------------------------------------------------------------------
# Sécurité - JWT
# ----------------------------------------------------------------------------
# Générez un secret aléatoire avec: openssl rand -base64 32
JWT_SECRET=CHANGEZ_MOI_SECRET_ALEATOIRE_32_CARACTERES
# ----------------------------------------------------------------------------
# Application
# ----------------------------------------------------------------------------
PORT=3000
NODE_ENV=production
# Titre de l'application
VITE_APP_TITLE=Gestion des Formations Manager Itinova
# Logo de l'application (chemin relatif dans public/)
VITE_APP_LOGO=/logo-itinova.png
# ----------------------------------------------------------------------------
# OAuth Manus (pour connexion OAuth - optionnel si vous utilisez uniquement local)
# ----------------------------------------------------------------------------
# Si vous n'utilisez PAS l'authentification Manus OAuth, vous pouvez laisser
# ces valeurs par défaut ou les commenter
VITE_APP_ID=formation-manager-itinova
OAUTH_SERVER_URL=https://api.manus.im
VITE_OAUTH_PORTAL_URL=https://portal.manus.im
OWNER_OPEN_ID=local-owner
OWNER_NAME=Administrateur
# ----------------------------------------------------------------------------
# SMTP - Configuration email (pour envoi d'emails)
# ----------------------------------------------------------------------------
# Laissez vide si vous n'utilisez pas l'envoi d'emails pour le moment
SMTP_HOST=
SMTP_PORT=
SMTP_USER=
SMTP_PASS=
SMTP_FROM=
# ----------------------------------------------------------------------------
# Resend API (alternative à SMTP)
# ----------------------------------------------------------------------------
# Si vous utilisez Resend pour l'envoi d'emails
RESEND_API_KEY=
# ----------------------------------------------------------------------------
# Analytics (optionnel)
# ----------------------------------------------------------------------------
VITE_ANALYTICS_ENDPOINT=
VITE_ANALYTICS_WEBSITE_ID=
# ----------------------------------------------------------------------------
# API Forge Manus (pour fonctionnalités avancées - optionnel)
# ----------------------------------------------------------------------------
BUILT_IN_FORGE_API_URL=
BUILT_IN_FORGE_API_KEY=
VITE_FRONTEND_FORGE_API_KEY=
VITE_FRONTEND_FORGE_API_URL=

184
UPDATE.md Normal file
View File

@@ -0,0 +1,184 @@
# Guide de mise à jour sur VPS
## Problème résolu dans cette version
Cette mise à jour corrige le problème de redirection vers `portal.manus.im` après une connexion locale réussie.
**Cause** : Incompatibilité entre les bibliothèques JWT utilisées pour créer et vérifier les tokens de session.
**Solution** : Utilisation de la même méthode de signature (`sdk.createSessionToken()`) que le système OAuth.
---
## Procédure de mise à jour
### 1. Sauvegarder la configuration actuelle
```bash
# Sauvegarder le fichier .env
cp /var/www/formation-manager-itinova/.env /var/www/formation-manager-itinova/.env.backup
# Sauvegarder la base de données (optionnel mais recommandé)
mysqldump -u votre_utilisateur -p formation_manager > backup_$(date +%Y%m%d_%H%M%S).sql
```
### 2. Arrêter le service
```bash
sudo systemctl stop formation-manager
```
### 3. Extraire la nouvelle version
```bash
# Aller dans le répertoire parent
cd /var/www
# Sauvegarder l'ancienne version
mv formation-manager-itinova formation-manager-itinova.old
# Extraire la nouvelle archive
tar -xzf formation-manager-itinova-final-fixed.tar.gz
# Restaurer le fichier .env
cp formation-manager-itinova.old/.env formation-manager-itinova/.env
# Définir les bonnes permissions
chown -R www-data:www-data formation-manager-itinova
```
### 4. Installer les dépendances
```bash
cd formation-manager-itinova
pnpm install
```
### 5. Appliquer les migrations de base de données
```bash
pnpm db:push
```
### 6. Compiler l'application
```bash
pnpm build
```
### 7. Redémarrer le service
```bash
sudo systemctl start formation-manager
sudo systemctl status formation-manager
```
### 8. Vérifier les logs
```bash
# Voir les logs en temps réel
sudo journalctl -u formation-manager -f
# Voir les dernières lignes
sudo journalctl -u formation-manager -n 50
```
---
## Vérification que la mise à jour a fonctionné
### Test de connexion locale
1. Ouvrir votre navigateur et aller sur votre site
2. Cliquer sur "Connexion Locale"
3. Entrer :
- **Identifiant** : adminServFormation
- **Mot de passe** : Itinova69!
4. Cliquer sur "Se connecter"
**Résultat attendu** : Vous devez être redirigé vers le tableau de bord (`/admin`) et rester connecté, sans être redirigé vers `portal.manus.im`.
### Vérifier le cookie de session
Ouvrir les outils de développement du navigateur (F12) :
1. Aller dans l'onglet "Application" (Chrome) ou "Stockage" (Firefox)
2. Regarder les cookies
3. Vous devez voir un cookie nommé `manus-session` avec une valeur JWT
### Vérifier que l'API fonctionne
Ouvrir la console du navigateur (F12) et taper :
```javascript
fetch('/api/trpc/auth.me', {
credentials: 'include'
}).then(r => r.json()).then(console.log)
```
**Résultat attendu** : Vous devez voir vos informations utilisateur, pas une erreur d'authentification.
---
## En cas de problème
### Le service ne démarre pas
```bash
# Vérifier les erreurs
sudo journalctl -u formation-manager -n 100
# Vérifier que les dépendances sont installées
cd /var/www/formation-manager-itinova
pnpm install
```
### Toujours redirigé vers portal.manus.im
1. Vérifier que vous avez bien extrait la **nouvelle** archive
2. Vérifier que le service a bien redémarré :
```bash
sudo systemctl restart formation-manager
```
3. Vider le cache du navigateur et supprimer les cookies
4. Vérifier les logs du serveur :
```bash
sudo journalctl -u formation-manager -f
```
### L'utilisateur admin n'existe pas
```bash
cd /var/www/formation-manager-itinova
./create-admin.sh
```
---
## Rollback (retour à l'ancienne version)
Si la mise à jour pose problème :
```bash
# Arrêter le service
sudo systemctl stop formation-manager
# Restaurer l'ancienne version
cd /var/www
rm -rf formation-manager-itinova
mv formation-manager-itinova.old formation-manager-itinova
# Redémarrer
sudo systemctl start formation-manager
```
---
## Support
Si vous rencontrez des problèmes après avoir suivi ce guide :
1. Vérifiez les logs : `sudo journalctl -u formation-manager -n 100`
2. Exécutez le script de diagnostic : `./diagnose.sh`
3. Exécutez le script de vérification : `./verify-login.sh`
Ces scripts vous donneront des informations détaillées sur la configuration et les problèmes éventuels.

159
setup-env.sh Executable file
View File

@@ -0,0 +1,159 @@
#!/bin/bash
###############################################################################
# Script de configuration du fichier .env pour production
###############################################################################
set -e
# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ Configuration du fichier .env pour production ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo ""
# Vérifier si .env existe déjà
if [ -f ".env" ]; then
echo -e "${YELLOW}[WARN]${NC} Le fichier .env existe déjà"
read -p "Voulez-vous le remplacer? (y/N) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Configuration annulée"
exit 0
fi
# Sauvegarder l'ancien
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
echo -e "${GREEN}[OK]${NC} Ancien fichier sauvegardé"
fi
echo "Ce script va créer un fichier .env avec les paramètres minimaux requis."
echo ""
# Demander DATABASE_URL
echo "═══════════════════════════════════════════════════════════════"
echo " 1. Configuration de la base de données"
echo "═══════════════════════════════════════════════════════════════"
echo ""
read -p "Hôte MySQL (défaut: localhost): " DB_HOST
DB_HOST=${DB_HOST:-localhost}
read -p "Port MySQL (défaut: 3306): " DB_PORT
DB_PORT=${DB_PORT:-3306}
read -p "Nom de la base de données (défaut: formation_manager): " DB_NAME
DB_NAME=${DB_NAME:-formation_manager}
read -p "Utilisateur MySQL: " DB_USER
read -sp "Mot de passe MySQL: " DB_PASS
echo ""
DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}"
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " 2. Génération du JWT_SECRET"
echo "═══════════════════════════════════════════════════════════════"
echo ""
JWT_SECRET=$(openssl rand -base64 32)
echo -e "${GREEN}[OK]${NC} JWT_SECRET généré: ${JWT_SECRET:0:20}..."
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " 3. Configuration de l'application"
echo "═══════════════════════════════════════════════════════════════"
echo ""
read -p "Port de l'application (défaut: 3000): " PORT
PORT=${PORT:-3000}
read -p "Titre de l'application (défaut: Gestion des Formations Manager Itinova): " APP_TITLE
APP_TITLE=${APP_TITLE:-Gestion des Formations Manager Itinova}
# Créer le fichier .env
cat > .env << EOF
# ============================================================================
# CONFIGURATION DE PRODUCTION - Formation Manager Itinova
# Généré le $(date)
# ============================================================================
# ----------------------------------------------------------------------------
# Base de données
# ----------------------------------------------------------------------------
DATABASE_URL=${DATABASE_URL}
# ----------------------------------------------------------------------------
# Sécurité - JWT
# ----------------------------------------------------------------------------
JWT_SECRET=${JWT_SECRET}
# ----------------------------------------------------------------------------
# Application
# ----------------------------------------------------------------------------
PORT=${PORT}
NODE_ENV=production
# Titre de l'application
VITE_APP_TITLE=${APP_TITLE}
# Logo de l'application
VITE_APP_LOGO=/logo-itinova.png
# ----------------------------------------------------------------------------
# OAuth Manus (configuration minimale pour éviter les erreurs)
# ----------------------------------------------------------------------------
VITE_APP_ID=formation-manager-itinova
OAUTH_SERVER_URL=https://api.manus.im
VITE_OAUTH_PORTAL_URL=https://portal.manus.im
OWNER_OPEN_ID=local-owner
OWNER_NAME=Administrateur
# ----------------------------------------------------------------------------
# SMTP - Configuration email (optionnel)
# ----------------------------------------------------------------------------
# Laissez vide si vous n'utilisez pas l'envoi d'emails
SMTP_HOST=
SMTP_PORT=
SMTP_USER=
SMTP_PASS=
SMTP_FROM=
# ----------------------------------------------------------------------------
# Analytics (optionnel)
# ----------------------------------------------------------------------------
VITE_ANALYTICS_ENDPOINT=
VITE_ANALYTICS_WEBSITE_ID=
# ----------------------------------------------------------------------------
# API Forge Manus (optionnel)
# ----------------------------------------------------------------------------
BUILT_IN_FORGE_API_URL=
BUILT_IN_FORGE_API_KEY=
VITE_FRONTEND_FORGE_API_KEY=
VITE_FRONTEND_FORGE_API_URL=
EOF
echo ""
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ Fichier .env créé avec succès! ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo ""
echo "📄 Fichier créé: $(pwd)/.env"
echo ""
echo "⚠️ IMPORTANT:"
echo " 1. Le fichier .env contient des informations sensibles"
echo " 2. Ne le partagez jamais publiquement"
echo " 3. Assurez-vous qu'il n'est pas accessible via le web"
echo ""
echo "🔄 Prochaines étapes:"
echo " 1. Vérifiez la configuration: cat .env"
echo " 2. Appliquez les migrations: pnpm db:push"
echo " 3. Compilez l'application: pnpm build"
echo " 4. Redémarrez le service: sudo systemctl restart formation-manager"
echo ""

View File

@@ -453,3 +453,9 @@
- [x] Analyser pourquoi la page de choix ne s'affiche pas au lancement
- [x] Corriger la redirection automatique
- [x] Tester l'affichage de la page de choix
## Sauvegarde complète avec corrections authentification
- [x] Appliquer toutes les corrections d'authentification locale
- [x] Créer un checkpoint final
- [ ] Créer un package de déploiement complet