3
respostas

[Dúvida] Tratando email inexistente

Olá,

Outro colega postou sobre o problema de não aparecer o retorno, conforme a aula, quando o e-mail não existe, então foi respondido para usar o método fetchSignInMethodsForEmail, utilizei este método e ele agora retorna sempre que não há e-mail, mesmo com e-mail cadastrado e também este método está descontinuado e não deve mais ser usado, qual outra alternativa para corrigir isso?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Outra coisa bem importante seria incluir um adendo no curso informando que houveram mudanças, de início eu fiquei procurando o erro no meu código quando então recorri ao fórum e vi que havia outra postagem do mesmo assunto, isso torna o estudo mais produtivo.

3 respostas

Opa, blz?

Vc pode usar o método signInWithEmailAndPassword que ai vai capturar o erro que corresponde e que será retornado quando o e-mail não estiver cadastrado.

Um exemplo ok? porque nao tenho acesso ao teu codigo fonte, mas vc pode usar de base:

try {
  UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
    email: email,
    password: password,
  );
  // Se chegou até aqui, o usuário foi autenticado com sucesso
} on FirebaseAuthException catch (e) {
  if (e.code == 'user-not-found') {
    // Tratar o caso em que o e-mail não está cadastrado
    print('E-mail não cadastrado.');
  } else if (e.code == 'wrong-password') {
    // Tratar o caso em que a senha está incorreta
    print('Senha incorreta.');
  } else {
    // Outros erros
    print('Erro ao autenticar: ${e.message}');
  }
} catch (e) {
  print('Erro: $e');
}

Links da documentação que usei de base:

https://firebase.google.com/docs/auth/web/password-auth?hl=pt-br#sign_in_a_user_with_an_email_address_and_password https://firebase.google.com/docs/auth/web/password-auth?hl=pt-br

Opa,

Esse método signInWithEmailAndPassword nós usamos no código para login:

Future<String?> entrarUsuario({
    required String email,
    required String senha,
  }) async {
    try {
      await _firebaseAuth.signInWithEmailAndPassword(
          email: email, password: senha);
      print('Usuário logado com sucesso');
    } on FirebaseAuthException catch (e) {
      switch (e.code) {
        case 'user-not-found':
          return 'Usuário não encontrado';
        case 'invalid-credential':
          return 'Usuário ou senha inválidos';
        case 'too-many-requests':
          return 'Tente novamente';
        case 'wrong-password':
          return 'Senha incorreta';
      }
      return e.code;
    }
    return null;
  }

Gostei da sua ideia mas o problema é que, no vídeo da aula o método sendPasswordResetEmail tratava a exceção do tipo user-not-found conforme o código:

Future<String?> redefinirSenha ({required String email}) async {
    try {
      await _firebaseAuth.sendPasswordResetEmail(email: email);
    } on FirebaseAuthException catch (e) {
      if (e.code == 'user-not-found') {
        return 'Email não cadastrado.';
      }
      return e.code;
    }
    return null;
  }

Porém, imagino que devido a alguma atualização provavelmente por segurança, o Firebase não permite mais requisitar senha dessa forma, ele simplesmente passa como se não houvesse erro.

Também estou com o mesmo problema no momento de requisitar a recuperação de senha utilizando a propriedade sendPasswordResetEmail, quando coloco um email e faço a depuração do código encontro o channel-error:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

SERVICE: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

LoguinScreen:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código no github: https://github.com/ItsonStos/listin-app.git