diff --git a/GUIDE_ERREUR_OAUTH_GOOGLE.md b/GUIDE_ERREUR_OAUTH_GOOGLE.md new file mode 100644 index 0000000..fb1e430 --- /dev/null +++ b/GUIDE_ERREUR_OAUTH_GOOGLE.md @@ -0,0 +1,174 @@ +# 🚹 RĂ©solution : Erreur 400 - AccĂšs bloquĂ© Google OAuth + +## L'erreur que vous voyez + +``` +AccĂšs bloquĂ© : erreur d'autorisation +You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy +Error 400: invalid_request +``` + +## 🔍 Cause du problĂšme + +Cette erreur se produit quand votre **application OAuth est en mode "Testing"** dans Google Cloud Console et que l'utilisateur qui essaie de se connecter n'est pas dans la liste des testeurs autorisĂ©s. + +## ✅ Solution complĂšte (Ă©tape par Ă©tape) + +### Option 1 : Ajouter l'utilisateur comme testeur (Solution rapide) + +#### Étape 1 : AccĂ©der Ă  l'Ă©cran de consentement OAuth +1. Allez sur [Google Cloud Console](https://console.cloud.google.com) +2. SĂ©lectionnez votre projet +3. Dans le menu de gauche : **APIs & Services** > **OAuth consent screen** + +#### Étape 2 : VĂ©rifier le statut de publication +Vous devriez voir : +``` +Publishing status: Testing +``` + +#### Étape 3 : Ajouter des utilisateurs testeurs +1. Faites dĂ©filer jusqu'Ă  la section **"Test users"** +2. Cliquez sur **"+ ADD USERS"** +3. Ajoutez l'adresse email : `michaelschal@gmail.com` +4. Cliquez sur **"SAVE"** + +#### Étape 4 : Tester la connexion +1. Retournez sur NoteFlow +2. Dans **Administration** > **Google Calendar** +3. Cliquez sur **"Se connecter avec Google"** +4. ✅ Vous devriez maintenant pouvoir vous authentifier ! + +--- + +### Option 2 : Publier l'application (Solution permanente) + +⚠ **Attention** : Cette option est pour une utilisation publique. Si c'est pour un usage personnel, utilisez l'Option 1. + +#### Étape 1 : PrĂ©parer l'application +1. Allez sur [Google Cloud Console](https://console.cloud.google.com) +2. **APIs & Services** > **OAuth consent screen** + +#### Étape 2 : ComplĂ©ter l'Ă©cran de consentement +Assurez-vous d'avoir rempli : +- ✅ App name (Nom de l'application) : `NoteFlow` +- ✅ User support email (Email de support) +- ✅ Developer contact information (Informations de contact) +- ✅ App logo (Optionnel mais recommandĂ©) +- ✅ App domain (Domaine de l'application) : `note.ffnancy.fr` +- ✅ Authorized domains : `ffnancy.fr` + +#### Étape 3 : VĂ©rifier les Scopes (Permissions) +Dans l'onglet **"Scopes"**, assurez-vous d'avoir uniquement : +``` +https://www.googleapis.com/auth/calendar.readonly +https://www.googleapis.com/auth/calendar.events +``` + +Ces scopes sont considĂ©rĂ©s comme "sensibles" mais **ne nĂ©cessitent PAS** de vĂ©rification Google pour un usage personnel. + +#### Étape 4 : Publier l'application +1. Retournez sur l'onglet **"OAuth consent screen"** +2. Cliquez sur le bouton **"PUBLISH APP"** +3. Confirmez en cliquant sur **"CONFIRM"** + +⚠ **Note importante** : +- Votre app restera en status "In production" mais **"Not verified"** +- C'est **normal et acceptable** pour un usage personnel ou interne +- Les utilisateurs verront un avertissement mais pourront cliquer sur "Advanced" > "Go to NoteFlow (unsafe)" pour continuer +- Google ne nĂ©cessite une vĂ©rification que pour les apps publiques avec beaucoup d'utilisateurs + +--- + +## 🔧 VĂ©rifications supplĂ©mentaires + +### 1. VĂ©rifier l'URL de redirection + +Dans **APIs & Services** > **Credentials** > Votre OAuth 2.0 Client ID : + +L'URL de redirection doit ĂȘtre **EXACTEMENT** : +``` +https://note.ffnancy.fr/api/calendar/oauth-callback +``` + +❌ **Erreurs courantes** : +- `https://note.ffnancy.fr/api/calendar/oauth-callback/` (slash Ă  la fin) +- `http://note.ffnancy.fr/api/calendar/oauth-callback` (http au lieu de https) +- `https://www.note.ffnancy.fr/api/calendar/oauth-callback` (www en trop) + +### 2. VĂ©rifier l'API activĂ©e + +Dans **APIs & Services** > **Library** : +1. Recherchez **"Google Calendar API"** +2. VĂ©rifiez que le status est **"ENABLED"** +3. Si ce n'est pas le cas, cliquez sur **"ENABLE"** + +### 3. VĂ©rifier les credentials dans NoteFlow + +Dans NoteFlow > **Administration** > **Google Calendar** : +1. MĂ©thode d'authentification : **OAuth 2.0** +2. Client ID Google : Doit commencer par des chiffres et finir par `.apps.googleusercontent.com` +3. Client Secret : Doit commencer par `GOCSPX-` +4. URL du site : `https://note.ffnancy.fr` (automatiquement dĂ©tectĂ©e) + +--- + +## 📋 RĂ©sumĂ© de la solution recommandĂ©e + +### Pour un usage personnel (recommandĂ©) : + +``` +1. Google Cloud Console > OAuth consent screen +2. VĂ©rifier : Publishing status = Testing +3. Ajouter michaelschal@gmail.com dans "Test users" +4. SAVE +5. Retourner sur NoteFlow et se reconnecter +``` + +### Pour un usage public : + +``` +1. ComplĂ©ter toutes les informations de l'Ă©cran de consentement +2. Publier l'application (PUBLISH APP) +3. Accepter que l'app soit "Not verified" (c'est normal) +4. Les utilisateurs devront cliquer sur "Advanced" > "Continue to NoteFlow" +``` + +--- + +## ❓ Questions frĂ©quentes + +### Pourquoi Google dit que mon app n'est pas conforme ? +En mode "Testing", seuls les utilisateurs testeurs listĂ©s peuvent accĂ©der Ă  l'application. C'est une mesure de sĂ©curitĂ© de Google. + +### Est-ce que je dois faire vĂ©rifier mon application par Google ? +**Non**, sauf si : +- Vous avez plus de 100 utilisateurs +- Vous publiez l'application publiquement +- Vous demandez des scopes sensibles en dehors du calendrier + +Pour un usage personnel ou en petite Ă©quipe, le mode "Testing" avec des testeurs est suffisant. + +### Combien de testeurs puis-je ajouter ? +Jusqu'Ă  **100 testeurs** en mode "Testing". C'est largement suffisant pour un usage personnel ou une petite entreprise. + +### L'authentification expire-t-elle ? +En mode "Testing", les tokens OAuth expirent aprĂšs **7 jours**. En mode "Production", ils sont permanents (jusqu'Ă  rĂ©vocation). + +--- + +## 🆘 Besoin d'aide ? + +Si le problĂšme persiste aprĂšs avoir suivi ces Ă©tapes : +1. VĂ©rifiez les logs de l'application : `docker-compose logs -f notes-todo-app` +2. VĂ©rifiez que vous avez attendu 5-10 minutes aprĂšs les changements dans Google Cloud Console +3. Essayez en navigation privĂ©e pour Ă©liminer les problĂšmes de cache +4. DĂ©connectez-vous de Google Calendar dans NoteFlow et reconnectez-vous + +--- + +## 📚 Documentation supplĂ©mentaire + +- [Guide complet OAuth 2.0](./OAUTH_SETUP.md) +- [Configuration Google Calendar](./GUIDE_CONFIG_OAUTH.md) +- [Google OAuth 2.0 Documentation](https://developers.google.com/identity/protocols/oauth2) diff --git a/routes/calendar.routes.js b/routes/calendar.routes.js index bf6decc..39fe433 100644 --- a/routes/calendar.routes.js +++ b/routes/calendar.routes.js @@ -50,14 +50,16 @@ async function getOAuth2Client(customRedirectUri = null, req = null) { } } - // Utiliser l'URI personnalisĂ©e si fournie, sinon l'URL configurĂ©e, sinon l'URL dĂ©tectĂ©e + // URL par dĂ©faut en production (hardcodĂ©e pour assurer la compatibilitĂ©) + const defaultProductionUrl = 'https://note.ffnancy.fr'; + + // PrioritĂ©: URI personnalisĂ©e > URL configurĂ©e > URL dĂ©tectĂ©e > URL par dĂ©faut const redirectUri = customRedirectUri || (appUrl?.value ? `${appUrl.value}/api/calendar/oauth-callback` : null) || - (detectedUrl ? `${detectedUrl}/api/calendar/oauth-callback` : null); + (detectedUrl ? `${detectedUrl}/api/calendar/oauth-callback` : null) || + `${defaultProductionUrl}/api/calendar/oauth-callback`; - if (!redirectUri) { - throw new Error('URL du site non configurĂ©e. Veuillez configurer l\'URL dans les paramĂštres (ParamĂštres > Google Calendar > URL du site).'); - } + logger.info(`OAuth redirect URI utilisĂ©e: ${redirectUri}`); return new google.auth.OAuth2( clientId.value,