2
respostas

[Bug] E-mail de reset password está sendo enviado para usuários que não estão cadastrados

Meu código retorna o scaffold de email enviado mesmo se o usuário não está cadastrado.

Future<String?> forgotPassword({required String email}) async { try{ _firebaseAuth.sendPasswordResetEmail(email: email);

}on FirebaseAuthException catch(e){
  
  if(e.code == 'invalid-email'){
    return 'O e-mail está inválido, verifique suas credenciais.';
  }
  return e.code;
}
return null;

}

2 respostas

Olá, Julia! Tudo bem?

O comportamento que você está observando é esperado no Firebase Authentication. Por questões de segurança, o Firebase não revela se um e-mail está cadastrado ou não no sistema ao enviar um e-mail de redefinição de senha. Isso é feito para evitar que pessoas mal-intencionadas possam verificar a existência de e-mails no banco de dados.

No entanto, você pode melhorar a experiência do usuário ao fornecer um feedback mais claro. Uma abordagem comum é sempre exibir uma mensagem genérica informando que, se o e-mail estiver cadastrado, um link de redefinição será enviado. Seria algo como:

Future<String?> forgotPassword({required String email}) async {
    try {
        await _firebaseAuth.sendPasswordResetEmail(email: email);
        return 'Se o e-mail estiver cadastrado, um link de redefinição de senha será enviado.';
    } on FirebaseAuthException catch (e) {
        if (e.code == 'invalid-email') {
            return 'O e-mail está inválido, verifique suas credenciais.';
        }
        return 'Ocorreu um erro ao tentar enviar o e-mail de redefinição de senha.';
    }
}

Dessa forma, você está fornecendo um feedback útil sem comprometer a segurança do sistema.

Espero ter ajudado. Em caso de dúvidas, conte com o fórum :)

Um abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigada pelo retorno Rafaela, vou testar no meu código!