#android #firebase #flutter #firebase-authentication
#Android #firebase #флаттер #firebase-аутентификация
Вопрос:
- Я создаю пользователя Firebase Auth с электронной почтой и паролем
- Пользователь входит в систему
- Пользователь решает добавить номер телефона в свой профиль
- Я звоню
verifyPhoneNumber
с намерением получить код, вызываюPhoneAuthProvider.getCredential(...)
и ссылаюсь в результатеAuthCredential
на адрес электронной почты и пароль. - Вместо этого Android автоматически извлекает код, пользователь автоматически входит в систему с номером телефона, его UID меняется (это новый пользователь), и нет способа связать учетные данные телефона с исходным пользователем электронной почты / пароля. Чтобы выполнить успешную ссылку, мне нужно увидеть SMS-код, который нигде не будет найден в случае успешного автоматического входа.
- ????
- НИКАКОЙ ПРИБЫЛИ.
Есть идеи? Я пытался установить время ожидания равным 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 /…