Как узнать, что адрес электронной почты пользователя уже зарегистрирован - PullRequest
0 голосов
/ 27 мая 2020

Я использую FirebaseAuth для создания учетной записи пользователя, но я хочу знать, зарегистрирован ли пользователь уже, чтобы предупредить пользователя о том, что происходит.

Я видел сообщения об этом с апреля, но похоже, что addOnCompleteListener больше не существует.

Есть ли другой способ реализовать это?

Вот что у меня:

try {
  final newUser = await _auth.createUserWithEmailAndPassword(email: _email, password: _password);
  if (newUser != null) 
    Navigator.pushNamed(context, HomePage.id);
} catch (e) {...}

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Чтобы узнать, существует ли уже учетная запись в Firebase Authentication для данного адреса электронной почты, вызовите метод fetchSignInMethodsForEmail . Лог c этого метода заключается в том, что он сообщит вам, у какого провайдера (-ов) была создана учетная запись для этого адреса электронной почты, чтобы вы могли показать пользовательский интерфейс, позволяющий пользователю выбрать своего провайдера.

1 голос
/ 27 мая 2020

Функция createUserWithEmailAndPassword FirebaseAuth вернет исключение, если уже существует учетная запись, связанная с этим адресом электронной почты, а также для любой другой ошибки, которая происходит во время регистрации. Вы можете отслеживать это исключение и действовать соответствующим образом. Обычно я это делаю в функции asyn c в отдельном классе службы Auth:

Asyn c Пример функции:

Future<String> signUp(String email, String password) async {
    AuthResult result = await _auth.createUserWithEmailAndPassword(
        email: email, password: password);
    return result.user.uid;
  }

Ожидайте результата:

try {
        await signUp(email, password).then((uid) {
          // User successfully created so Navigate to new page etc
        });
      } catch (e) {
        print("Error in sign up: $e");
        String exception = getExceptionText(e);
        _showErrorAlert(
          title: "Signup failed",
          content: exception,
        );
      }

И для справки вот функция getExceptionText внутри службы Auth:

String getExceptionText(Exception e) {
    if (e is PlatformException) {
      switch (e.message) {
        case 'There is no user record corresponding to this identifier. The user may have been deleted.':
          return 'User with this e-mail not found.';
          break;
        case 'The password is invalid or the user does not have a password.':
          return 'Invalid password.';
          break;
        case 'A network error (such as timeout, interrupted connection or unreachable host) has occurred.':
          return 'No internet connection.';
          break;
        case 'The email address is already in use by another account.':
          return 'Email address is already taken.';
          break;
        default:
          return 'Unknown error occured.';
      }
    } else {
      return 'Unknown error occured.';
    }
  }
...