Documentação

Solução de problemas

Problemas comuns do Motoko Base e correções — auth, OAuth, banco, email, billing, storage, Sentry e falhas de build.

Abrir emChatGPT (abre em uma nova aba)Claude (abre em uma nova aba)Cursor (abre em uma nova aba)Problemas comuns do Motoko Base e correções — auth, OAuth, banco, email, billing, storage, Sentry e falhas de build.

Correções rápidas para problemas que costumam aparecer na primeira configuração ou no deploy de produção. Para detalhes de env, veja Environment Variables.

A autenticação não funciona

Sintomas: Não consegue entrar, sessão perdida ao atualizar, loops de redirect, cookies não definidos.

VerificaçãoCorreção
BETTER_AUTH_SECRET ausenteDefina em .env — obrigatório em produção
BETTER_AUTH_URL erradoDeve coincidir com a URL que você abre no navegador (incluindo http:// vs https://, porta, sem problemas de barra final)
Descompasso com NEXT_PUBLIC_APP_URLAlinhe ambos à mesma origem em cada ambiente
Banco fora / migrações não rodadasVerifique DATABASE_URL, execute pnpm db:migrate
Email não verificadoO dashboard exige verificação — confira a caixa de entrada ou use /verify-email

Veja Better Auth e Installation.

Erro de callback OAuth

Sintomas: redirect_uri_mismatch, erro do Google/GitHub após autorizar, botões sociais desabilitados.

VerificaçãoCorreção
Botão desabilitadoDefina ambos GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET (ou o par do GitHub); reinicie o servidor de desenvolvimento
URL de callback divergenteO console do provedor deve ter exatamente {BETTER_AUTH_URL}/api/auth/callback/google ou .../github
Produção vs localAdicione URLs de callback separadas para localhost e o domínio de produção
Modo de teste do GoogleAdicione sua conta como usuário de teste na tela de consentimento OAuth

Veja OAuth Setup.

Falha na conexão com o banco

Sintomas: App trava no boot, migrações falham, ECONNREFUSED, erros de timeout.

VerificaçãoCorreção
DATABASE_URL ausente ou erradoCopie do dashboard Supabase/host; nunca use NEXT_PUBLIC_*
Migrações não aplicadaspnpm db:migrate
Pooler vs diretoRuntime: transaction pooler (muitas vezes porta 6543). Migrações: tente URL direta (porta 5432) se o DDL falhar
Projeto Supabase pausadoRestaure o projeto no dashboard do Supabase
prepare: falseJá definido em src/lib/db/index.ts — obrigatório para o pooler do Supabase; não habilite prepared statements

Veja Database e Migrations.

Emails não estão sendo enviados

Sintomas: Sem email de verificação após o cadastro, forgot-password não faz nada, email de boas-vindas ausente.

VerificaçãoCorreção
Resend não configuradoDefina RESEND_API_KEY e EMAIL_FROM
Remetente erradoUse domínio verificado em produção; para testes tente onboarding@resend.dev
BETTER_AUTH_URL erradoLinks de reset/verificação apontam para o host errado — corrija a origem
Erro na página de forgot-passwordA página checa isEmailConfigured() — ambas as vars do Resend são necessárias
Dashboard do ResendConfira os logs do Resend por bounces ou erros de API

Veja Email (Resend).

O checkout do Polar não abre

Sintomas: Página de billing mostra “not configured”, botão de checkout falha, permanece em Free após o pagamento.

VerificaçãoCorreção
Variáveis de ambiente faltandoPOLAR_ACCESS_TOKEN, POLAR_PRO_MONTHLY_PRODUCT_ID, POLAR_WEBHOOK_SECRET
Sandbox vs productionPOLAR_SERVER=sandbox com token/produto sandbox — ou production com credenciais ao vivo
URL do webhook{APP_URL}/api/billing/webhooks/polar — deve ser alcançável pelo Polar
Após o checkoutA página de billing usa getFreshBillingSummary no redirect de sucesso; confirme que o webhook foi entregue
Sem cliente PolarO usuário precisa de um cliente Polar (criado no cadastro quando billing está configurado) antes do portal

Veja Payments (Polar).

Upload R2 falha

Sintomas: Página de storage mostra mensagem de config, erro de URL pré-assinada, falha CORS no upload do navegador, 403 no PUT.

VerificaçãoCorreção
Vars R2_* faltandoDefina account ID, access key, secret e nome do bucket
Nome do bucket com barramy-bucket/demo → bucket my-bucket, prefix demo/ — ou use R2_PREFIX
CORSAdicione a origem do app à política CORS do bucket R2 no Cloudflare
Arquivo grande demais / MIME erradoLimites em src/features/storage/config.ts
Validação HEAD falhaO servidor valida o upload após o PUT — confira se o objeto existe no dashboard R2

Veja Storage (R2).

O Sentry não recebe erros

Sintomas: Sem issues no dashboard do Sentry após lançar um erro de teste.

VerificaçãoCorreção
Testando em next devO Sentry fica desativado em dev — use pnpm build && pnpm start ou teste na produção implantada
DSN ausenteDefina NEXT_PUBLIC_SENTRY_DSN
Projeto erradoConfirme que o DSN corresponde ao projeto Sentry que você está vendo
Bloqueadores de anúncioO navegador pode bloquear o Sentry — tente a rota /sentry-tunnel ou um erro no servidor
Source mapsDefina SENTRY_AUTH_TOKEN, SENTRY_ORG, SENTRY_PROJECT em tempo de build para stacks legíveis

Veja Monitoring (Sentry).

Build falha

Sintomas: pnpm build termina com erros localmente ou no CI.

VerificaçãoCorreção
Versão do NodeRequer Node ≥ 22 — rode node -v
Erros de tipopnpm typecheck — corrija os problemas TypeScript reportados
Erros de lintpnpm lint
Env faltando no buildA maioria das vars é só de runtime; vars de upload do Sentry só se usar source maps
MDX / docsRode pnpm install para que o postinstall (fumadocs-mdx) conclua
LockfileUse pnpm install — não misture npm/yarn
pnpm lint && pnpm typecheck && pnpm test && pnpm build

Ainda travado?

  1. Relia Installation e Configuração de produção
  2. Compare seu .env com .env.example
  3. Confira os dashboards das integrações (Resend, Polar, Cloudflare, PostHog, Sentry)
  4. Busque no README do repo e nos READMEs de features em src/lib/email/, src/lib/security/, etc.

Scripts — Referência de comandos.

Referência de configuração — Índice de arquivos de configuração.