Checkpoint: Version finale avec authentification locale corrigée : utilisation de sdk.createSessionToken() et configuration SameSite=Lax pour compatibilité HTTP
This commit is contained in:
68
.env.production.template
Normal file
68
.env.production.template
Normal 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
184
UPDATE.md
Normal 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
159
setup-env.sh
Executable 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 ""
|
||||||
6
todo.md
6
todo.md
@@ -453,3 +453,9 @@
|
|||||||
- [x] Analyser pourquoi la page de choix ne s'affiche pas au lancement
|
- [x] Analyser pourquoi la page de choix ne s'affiche pas au lancement
|
||||||
- [x] Corriger la redirection automatique
|
- [x] Corriger la redirection automatique
|
||||||
- [x] Tester l'affichage de la page de choix
|
- [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
|
||||||
|
|||||||
Reference in New Issue
Block a user