Documentación

Solución de problemas

Problemas frecuentes de Motoko Base y correcciones — auth, OAuth, base de datos, email, billing, storage, Sentry y fallos de build.

Abrir enChatGPT (se abre en una pestaña nueva)Claude (se abre en una pestaña nueva)Cursor (se abre en una pestaña nueva)Problemas frecuentes de Motoko Base y correcciones — auth, OAuth, base de datos, email, billing, storage, Sentry y fallos de build.

Correcciones rápidas para problemas que suelen aparecer en la primera configuración o en el deploy a producción. Para detalles de env, consulta Environment Variables.

La autenticación no funciona

Síntomas: No se puede iniciar sesión, la sesión se pierde al refrescar, bucles de redirección, cookies no establecidas.

ComprobaciónCorrección
Falta BETTER_AUTH_SECRETDefínelo en .env — obligatorio en producción
BETTER_AUTH_URL incorrectoDebe coincidir con la URL que abres en el navegador (incluido http:// vs https://, puerto, sin problemas de barra final)
Desajuste con NEXT_PUBLIC_APP_URLAlinea ambos al mismo origen en cada entorno
Base de datos caída / migraciones no aplicadasVerifica DATABASE_URL, ejecuta pnpm db:migrate
Email no verificadoEl dashboard requiere verificación — revisa el buzón o usa /verify-email

Consulta Better Auth e Installation.

Error de callback de OAuth

Síntomas: redirect_uri_mismatch, error de Google/GitHub tras autorizar, botones sociales deshabilitados.

ComprobaciónCorrección
Botón deshabilitadoDefine ambos GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET (o el par de GitHub); reinicia el servidor de desarrollo
Desajuste de URL de callbackLa consola del proveedor debe tener exactamente {BETTER_AUTH_URL}/api/auth/callback/google o .../github
Producción vs localAñade URLs de callback separadas para localhost y el dominio de producción
Modo de pruebas de GoogleAñade tu cuenta como usuario de prueba en la pantalla de consentimiento OAuth

Consulta OAuth Setup.

Fallo de conexión a la base de datos

Síntomas: La app falla al arrancar, migraciones fallan, ECONNREFUSED, errores de timeout.

ComprobaciónCorrección
DATABASE_URL sin definir o incorrectoCópialo del dashboard de Supabase/host; nunca uses NEXT_PUBLIC_*
Migraciones no aplicadaspnpm db:migrate
Pooler vs directoRuntime: transaction pooler (a menudo puerto 6543). Migraciones: prueba URL directa (puerto 5432) si falla el DDL
Proyecto de Supabase pausadoRestaura el proyecto en el dashboard de Supabase
prepare: falseYa está definido en src/lib/db/index.ts — obligatorio para el pooler de Supabase; no habilites prepared statements

Consulta Database y Migrations.

No se envían los emails

Síntomas: No llega el email de verificación tras el registro, forgot-password no hace nada, falta el email de bienvenida.

ComprobaciónCorrección
Resend no configuradoDefine RESEND_API_KEY y EMAIL_FROM
Remitente incorrectoUsa un dominio verificado en producción; para pruebas prueba onboarding@resend.dev
BETTER_AUTH_URL incorrectoLos enlaces de reset/verificación apuntan al host equivocado — corrige el origen
Error en la página de forgot-passwordLa página comprueba isEmailConfigured() — se requieren ambas variables de Resend
Dashboard de ResendRevisa los logs de Resend por rebotes o errores de API

Consulta Email (Resend).

El checkout de Polar no se abre

Síntomas: La página de billing muestra “not configured”, el botón de checkout falla, permanece en Free tras el pago.

ComprobaciónCorrección
Faltan variables de entornoPOLAR_ACCESS_TOKEN, POLAR_PRO_MONTHLY_PRODUCT_ID, POLAR_WEBHOOK_SECRET
Sandbox vs productionPOLAR_SERVER=sandbox con token/producto de sandbox — o production con credenciales en vivo
URL del webhook{APP_URL}/api/billing/webhooks/polar — debe ser accesible desde Polar
Tras el checkoutLa página de billing usa getFreshBillingSummary en el redirect de éxito; confirma que el webhook se entregó
Sin cliente de PolarEl usuario necesita un cliente de Polar (creado al registrarse cuando billing está configurado) antes del portal

Consulta Payments (Polar).

Fallo de subida a R2

Síntomas: La página de storage muestra mensaje de configuración, error de URL prefirmada, fallo CORS en la subida del navegador, 403 en PUT.

ComprobaciónCorrección
Faltan variables R2_*Define account ID, access key, secret y nombre del bucket
Nombre de bucket con barramy-bucket/demo → bucket my-bucket, prefix demo/ — o usa R2_PREFIX
CORSAñade el origen de tu app a la política CORS del bucket R2 en Cloudflare
Archivo demasiado grande / MIME incorrectoLímites en src/features/storage/config.ts
Fallo de validación HEADEl servidor valida la subida tras el PUT — comprueba que el objeto exista en el dashboard de R2

Consulta Storage (R2).

Sentry no recibe errores

Síntomas: No hay issues en el dashboard de Sentry tras lanzar un error de prueba.

ComprobaciónCorrección
Probando en next devSentry está desactivado en desarrollo — usa pnpm build && pnpm start o prueba en producción desplegada
DSN sin definirDefine NEXT_PUBLIC_SENTRY_DSN
Proyecto incorrectoConfirma que el DSN coincide con el proyecto de Sentry que estás viendo
Bloqueadores de anunciosEl navegador puede bloquear Sentry — prueba la ruta /sentry-tunnel o un error del lado del servidor
Source mapsDefine SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT en tiempo de build para stacks legibles

Consulta Monitoring (Sentry).

Fallo de build

Síntomas: pnpm build termina con errores en local o en CI.

ComprobaciónCorrección
Versión de NodeRequiere Node ≥ 22 — ejecuta node -v
Errores de tipopnpm typecheck — corrige los problemas de TypeScript reportados
Errores de lintpnpm lint
Env faltante en buildLa mayoría de variables son solo de runtime; las de subida de Sentry solo hacen falta si usas source maps
MDX / docsEjecuta pnpm install para que postinstall (fumadocs-mdx) termine
LockfileUsa pnpm install — no mezcles npm/yarn
pnpm lint && pnpm typecheck && pnpm test && pnpm build

¿Sigues atascado?

  1. Vuelve a leer Installation y Configuración de producción
  2. Compara tu .env con .env.example
  3. Revisa los dashboards de integraciones (Resend, Polar, Cloudflare, PostHog, Sentry)
  4. Busca en el README del repo y en los README de features bajo src/lib/email/, src/lib/security/, etc.

Scripts — Referencia de comandos.

Referencia de configuración — Índice de archivos de configuración.