Как использовать linkWithCredential с verifyPhoneNumber?

#android #firebase #flutter #firebase-authentication

#Android #firebase #флаттер #firebase-аутентификация

Вопрос:

  1. Я создаю пользователя Firebase Auth с электронной почтой и паролем
  2. Пользователь входит в систему
  3. Пользователь решает добавить номер телефона в свой профиль
  4. Я звоню verifyPhoneNumber с намерением получить код, вызываю PhoneAuthProvider.getCredential(...) и ссылаюсь в результате AuthCredential на адрес электронной почты и пароль.
  5. Вместо этого Android автоматически извлекает код, пользователь автоматически входит в систему с номером телефона, его UID меняется (это новый пользователь), и нет способа связать учетные данные телефона с исходным пользователем электронной почты / пароля. Чтобы выполнить успешную ссылку, мне нужно увидеть SMS-код, который нигде не будет найден в случае успешного автоматического входа.
  6. ????
  7. НИКАКОЙ ПРИБЫЛИ.

Есть идеи? Я пытался установить время ожидания равным 0 для verifyPhoneNumber , но автоматический вход в систему все еще работает. Признать поражение и просто связать EmailAndPassword учетные данные с номером телефона, а не наоборот, не вариант, потому что это потребует массового копирования данных из старой записи пользователя в новую, изменения всех ссылок на этот UID везде и т.д.

Ответ №1:

verifyPhoneNumber разрешается с помощью PhoneAuthCredential .

Не имеет значения, извлекается ли код автоматически или происходит мгновенная проверка. По PhoneAuthCredential завершении выводится A verifyPhoneNumber .

Эти учетные данные могут использоваться либо для signInWithCredential входа в систему, либо для ссылки на существующего пользователя через linkWithCredential .

Комментарии:

1. Хорошая уловка, которая verifyPhoneNumber уже дает мне AuthCredential и не требует вызова getCredential() , но главный вопрос остается без ответа: как предотвратить автоматический вход в систему и, следовательно, изменение currentUser .

2. Что вы подразумеваете под автоматическим входом в систему? Вы имеете в виду мгновенную проверку подлинности телефона?

3. Да, мгновенная проверка немедленно регистрирует (нового) пользователя.

4. Это неверно. Мгновенная проверка вызовет onVerificationCompleted обратный вызов с PhoneAuthCredential , как описано здесь: firebase.google.com/docs/auth/android /…

5.Ну, я тоже считаю это неправильным поведением, но это то, что он делает, и это задокументировано прямо в официальном документе: Either sends an SMS with a 6 digit code to the phone number specified, or sign's the user in and verificationCompleted is called. pub.dartlang.org/documentation/firebase_auth/latest /…