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

Status Closed — not planned
Maintainer reply None cached
Activity 2 comments · opened Feb 10, 2026 · 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 ↗