Documentation

Dépannage

Problèmes courants de Motoko Base et correctifs — auth, OAuth, base de données, e-mail, billing, storage, Sentry et échecs de build.

Ouvrir dansChatGPT (s’ouvre dans un nouvel onglet)Claude (s’ouvre dans un nouvel onglet)Cursor (s’ouvre dans un nouvel onglet)Problèmes courants de Motoko Base et correctifs — auth, OAuth, base de données, e-mail, billing, storage, Sentry et échecs de build.

Correctifs rapides pour les problèmes qui apparaissent souvent lors du premier setup ou du déploiement en production. Pour les détails d’env, voir Environment Variables.

L’authentification ne fonctionne pas

Symptômes : Impossible de se connecter, session perdue au refresh, boucles de redirection, cookies non définis.

VérificationCorrectif
BETTER_AUTH_SECRET manquantDéfinir dans .env — requis en production
BETTER_AUTH_URL incorrectDoit correspondre à l’URL ouverte dans le navigateur (y compris http:// vs https://, port, pas de problème de slash final)
Décalage avec NEXT_PUBLIC_APP_URLAligner les deux sur la même origine dans chaque environnement
Base de données down / migrations non exécutéesVérifier DATABASE_URL, lancer pnpm db:migrate
E-mail non vérifiéLe dashboard exige la vérification — vérifier la boîte mail ou utiliser /verify-email

Voir Better Auth et Installation.

Erreur de callback OAuth

Symptômes : redirect_uri_mismatch, erreur Google/GitHub après autorisation, boutons sociaux désactivés.

VérificationCorrectif
Bouton désactivéDéfinir les deux GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET (ou la paire GitHub) ; redémarrer le serveur de dev
URL de callback incorrecteLa console du fournisseur doit avoir exactement {BETTER_AUTH_URL}/api/auth/callback/google ou .../github
Production vs localAjouter des URLs de callback séparées pour localhost et le domaine de production
Mode test GoogleAjouter votre compte comme utilisateur de test sur l’écran de consentement OAuth

Voir OAuth Setup.

Échec de connexion à la base de données

Symptômes : L’app plante au démarrage, migrations échouent, ECONNREFUSED, erreurs de timeout.

VérificationCorrectif
DATABASE_URL absent ou incorrectCopier depuis le dashboard Supabase/hôte ; ne jamais utiliser NEXT_PUBLIC_*
Migrations non appliquéespnpm db:migrate
Pooler vs directRuntime : transaction pooler (souvent port 6543). Migrations : essayer l’URL directe (port 5432) si le DDL échoue
Projet Supabase en pauseRestaurer le projet dans le dashboard Supabase
prepare: falseDéjà défini dans src/lib/db/index.ts — requis pour le pooler Supabase ; ne pas activer les prepared statements

Voir Database et Migrations.

Les e-mails ne sont pas envoyés

Symptômes : Pas d’e-mail de vérification après inscription, forgot-password ne fait rien, e-mail de bienvenue manquant.

VérificationCorrectif
Resend non configuréDéfinir RESEND_API_KEY et EMAIL_FROM
Expéditeur incorrectUtiliser un domaine vérifié en production ; pour les tests essayer onboarding@resend.dev
BETTER_AUTH_URL incorrectLes liens de reset/vérification pointent vers le mauvais hôte — corriger l’origine
Erreur page forgot-passwordLa page vérifie isEmailConfigured() — les deux vars Resend sont requises
Dashboard ResendVérifier les logs Resend pour les bounces ou erreurs API

Voir Email (Resend).

Le checkout Polar ne s’ouvre pas

Symptômes : La page billing affiche « not configured », le bouton checkout échoue, reste sur Free après paiement.

VérificationCorrectif
Variables d’environnement manquantesPOLAR_ACCESS_TOKEN, POLAR_PRO_MONTHLY_PRODUCT_ID, POLAR_WEBHOOK_SECRET
Sandbox vs productionPOLAR_SERVER=sandbox avec token/produit sandbox — ou production avec identifiants live
URL du webhook{APP_URL}/api/billing/webhooks/polar — doit être joignable depuis Polar
Après le checkoutLa page billing utilise getFreshBillingSummary sur le redirect de succès ; confirmer la livraison du webhook
Pas de client PolarL’utilisateur a besoin d’un client Polar (créé à l’inscription quand le billing est configuré) avant le portail

Voir Payments (Polar).

Échec d’upload R2

Symptômes : La page storage affiche un message de config, erreur d’URL présignée, échec CORS d’upload navigateur, 403 sur PUT.

VérificationCorrectif
Vars R2_* manquantesDéfinir account ID, access key, secret, nom du bucket
Nom de bucket avec slashmy-bucket/demo → bucket my-bucket, prefix demo/ — ou utiliser R2_PREFIX
CORSAjouter l’origine de l’app à la politique CORS du bucket R2 dans Cloudflare
Fichier trop volumineux / mauvais MIMELimites dans src/features/storage/config.ts
Échec de validation HEADLe serveur valide l’upload après PUT — vérifier que l’objet existe dans le dashboard R2

Voir Storage (R2).

Sentry ne reçoit pas les erreurs

Symptômes : Aucune issue dans le dashboard Sentry après un erreur de test.

VérificationCorrectif
Test dans next devSentry est désactivé en dev — utiliser pnpm build && pnpm start ou tester en production déployée
DSN absentDéfinir NEXT_PUBLIC_SENTRY_DSN
Mauvais projetConfirmer que le DSN correspond au projet Sentry consulté
Bloqueurs de pubsLe navigateur peut bloquer Sentry — essayer la route /sentry-tunnel ou une erreur côté serveur
Source mapsDéfinir SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT au build pour des stacks lisibles

Voir Monitoring (Sentry).

Échec du build

Symptômes : pnpm build se termine avec des erreurs en local ou en CI.

VérificationCorrectif
Version de NodeNécessite Node ≥ 22 — lancer node -v
Erreurs de typepnpm typecheck — corriger les problèmes TypeScript signalés
Erreurs de lintpnpm lint
Env manquant au buildLa plupart des vars sont runtime uniquement ; vars d’upload Sentry seulement si source maps
MDX / docsLancer pnpm install pour que postinstall (fumadocs-mdx) se termine
LockfileUtiliser pnpm install — ne pas mélanger npm/yarn
pnpm lint && pnpm typecheck && pnpm test && pnpm build

Toujours bloqué ?

  1. Relire Installation et Configuration de production
  2. Comparer votre .env à .env.example
  3. Vérifier les dashboards d’intégration (Resend, Polar, Cloudflare, PostHog, Sentry)
  4. Chercher dans le README du dépôt et les README de features sous src/lib/email/, src/lib/security/, etc.

Scripts — Référence des commandes.

Référence de configuration — Index des fichiers de configuration.