Bloquear reset de senha para usuários OAuth (Google)

Resolved 💬 2 comments Opened Feb 10, 2026 by marchi999 Closed Feb 13, 2026

Problema

Atualmente, usuários que se cadastraram via Google OAuth conseguem solicitar reset de senha, mesmo não tendo uma senha para resetar.

Fluxo atual:

  1. Usuário Google vai em "Esqueci minha senha"
  2. Digita seu email
  3. Recebe email de reset de senha
  4. Ao tentar resetar, pode falhar ou causar confusão

Comportamento esperado:

  • Verificar se o usuário tem provider: 'google' no banco
  • Se sim, retornar mensagem informativa: "Esta conta usa autenticação Google. Faça login com Google."
  • Não enviar email de reset

Arquivos afetados

  • app/(core)/auth/api/forgot-password/route.ts

Código sugerido

// Busca usuário
const user = await db.select().from(users).where(eq(users.email, email)).limit(1);
if (!user.length) return NextResponse.json({ ok: true }); // Não revela existência

// Verificar se é usuário OAuth
if (user[0].provider) {
  // Retorna ok: true para não revelar que a conta existe
  // Mas não envia email
  return NextResponse.json({ ok: true });
  
  // OU: Retornar mensagem específica (menos seguro, revela existência)
  // return NextResponse.json({ 
  //   error: `Esta conta usa autenticação ${user[0].provider}. Use o botão "Entrar com ${user[0].provider}".` 
  // }, { status: 400 });
}

Considerações de segurança

Opção 1 (mais segura): Retornar ok: true silenciosamente, sem enviar email. Não revela se a conta existe ou usa OAuth.

Opção 2 (melhor UX): Informar que a conta usa Google. Revela existência da conta, mas melhora experiência do usuário.

Labels

  • bug
  • auth
  • security

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗