4.4 KiB
4.4 KiB
🎉 RÉSOLUTION FINALE - Support Ticket Notifications
✅ Problème résolu !
Le problème était une question de permissions Supabase.
🔍 Diagnostic
L'erreur était :
AuthApiError: User not allowed
code: 'not_admin'
status: 403
🎯 Cause racine
sb.auth.admin.getUserById() nécessite des permissions administrateur (clé service_role), mais le code utilisait createSbServer() qui utilise la clé anon (publique).
🔧 Solution appliquée
Fichiers modifiés :
-
/app/api/tickets/[id]/recipient-info/route.ts// Ajout de l'import import { createSbServer, createSbServiceRole } from "@/lib/supabaseServer"; // Utilisation du service role pour getUserById const sbAdmin = createSbServiceRole(); const { data: creatorUser } = await sbAdmin.auth.admin.getUserById(ticket.created_by); -
/app/(app)/staff/tickets/[id]/page.tsx// Ajout de l'import import { createSbServer, createSbServiceRole } from "@/lib/supabaseServer"; // Utilisation du service role pour getUserById const sbAdmin = createSbServiceRole(); const { data: creatorUser } = await sbAdmin.auth.admin.getUserById(ticket.created_by);
🎬 Actions à faire maintenant
- Le serveur va recharger automatiquement (hot reload)
- Rechargez la page du ticket dans votre navigateur
- Vérifiez :
- Le nom du créateur devrait s'afficher correctement
- Le modal de confirmation devrait s'afficher quand vous cliquez sur "Envoyer"
📋 Ce qui devrait maintenant fonctionner
✅ Sur la page /staff/tickets/[id] :
┌─────────────────────────────────────────┐
│ Organisation: Nom de l'entreprise │
│ Ouvert par: Jean (ou email) │ ← Maintenant correct !
└─────────────────────────────────────────┘
✅ Dans le modal de confirmation :
┌─────────────────────────────────────────┐
│ Confirmer l'envoi de votre réponse │
│ │
│ Destinataire │
│ 📧 jean@example.com │
│ Jean │ ← Maintenant correct !
│ │
│ Message │
│ [Votre message...] │
│ │
│ [Annuler] [Envoyer ✉️] │ ← Fonctionne !
└─────────────────────────────────────────┘
🔍 Logs attendus dans le terminal
Vous devriez maintenant voir :
📋 [ticket page] Ticket: { id: '...', created_by: '...', ... }
📋 [ticket page] Tentative getUserById pour: ...
📋 [ticket page] getUserById result: { hasData: true, hasUser: true, hasEmail: true, error: null }
📋 [ticket page] Email: user@example.com
📋 [ticket page] User metadata: { "display_name": "Jean", ... }
✅ [ticket page] Nom trouvé dans display_name: Jean
Et pour l'API :
📋 [recipient-info] Ticket ID: ...
📋 [recipient-info] Created by: ...
📋 [recipient-info] getUserById result: { hasData: true, hasUser: true, hasEmail: true, error: null }
📋 [recipient-info] User metadata: { "display_name": "Jean", ... }
✅ [recipient-info] Nom trouvé dans display_name: Jean
🎓 Leçon apprise
Important à retenir :
auth.admin.getUserById()nécessite la cléservice_role- Utiliser
createSbServer()pour les opérations normales - Utiliser
createSbServiceRole()pour les opérations admin - Toujours vérifier les permissions AVANT d'utiliser le service role
📚 Documentation
Consultez :
SUPPORT_TICKET_NOTIFICATIONS_FIXES.md- Documentation complète des correctionsGUIDE_DEMARRAGE_TICKETS.md- Guide de démarrage et débogage
🚀 Testez maintenant !
- Rechargez la page du ticket
- Vérifiez que le nom s'affiche
- Essayez d'envoyer un message (sans cocher "Note interne")
- Le modal devrait s'afficher avec toutes les infos !
Résolution finale - 14 octobre 2025