Свяжите нескольких провайдеров аутентификации с учетной записью - PullRequest
1 голос
/ 16 апреля 2019

Я реализовал вход в Facebook и Google.

Но в документе FireBase сказано, что это вызовет ошибку, если тот же пользователь сначала зарегистрируется в Facebook, а затем попытается войти в систему через Google (с тем же адресом электронной почты).

Поэтому я следую за документом и пытаюсь настроить привязку учетной записи .

Но я не знаю, как это сделать.

Стоит ли пытаться связать учетную запись каждый раз, когда пользователь входит в систему? Проблема в том, что я не знаю, выполнил ли пользователь вход с другим поставщиком аутентификации.

Например, оригинальный код имеет:

Google:

  void _signInWithGoogle() async {
    final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
  }

Facebook:

  void _signInWithFacebook() async {
    final AuthCredential credential = FacebookAuthProvider.getCredential(
      accessToken: _tokenController.text,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
  }

Правильно ли звонить каждый раз в _signInWithFacebook() и _signInWithGoogle():

user = await auth.linkWithCredential(credential);

Например:

  void _signInWithFacebook() async {
    final AuthCredential credential = FacebookAuthProvider.getCredential(
      accessToken: _tokenController.text,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);

user = await auth.linkWithCredential(credential); //new

  }

Как я могу правильно реализовать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Когда пользователь вводит свой адрес электронной почты для входа, вы можете использовать fetchProvidersForEmail(), чтобы узнать, известен ли этот адрес электронной почты.

Если у пользователя естьуже зарегистрировались у другого провайдера, сейчас хороший момент спросить их, хотят ли они объединить эти учетные записи, а затем вызвать API связывания учетных записей.

0 голосов
/ 20 апреля 2019

@ FlutterFirebase, чтобы связать обоих провайдеров с одним и тем же адресом электронной почты, выполните следующие действия:

Нажмите консоль Firebase -> Аутентификация -> Метод входа, как показано ниже enter image description here

Теперь под этим методом входа есть опция «Несколько учетных записей на один адрес электронной почты», нажмите на изменение и включите «Разрешить создание нескольких учетных записей с одним и тем же адресом электронной почты» -> Сохранить.У вас все настроено.Теперь вы можете войти в систему с одним и тем же адресом электронной почты с разными провайдерами

enter image description here

Вот и все. Но если вы хотите получать письма от обоих провайдеров, то вам нужнодобавить дополнительный код.Вы можете оставить комментарий, если хотите использовать электронную почту для обоих провайдеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...