Firebase, jak połączyć konto utworzone za pomocą phoneNumber
✅ Jestem w stanie pozwolić użytkownikowi zaktualizować swój profil za pomocą numeru telefonu komórkowego za pomocą verifyPhoneNumber
i aktualizacjicurrentUser.updatePhoneNumber
❌ Mój problem pojawia się, gdy zezwalam na logowanie telefoniczne, a NOWY UŻYTKOWNIK próbuje zalogować się za pomocą numeru telefonu, konto jest tworzone automatycznie.
Jeśli następnie będę musiał powiązać numer z kontem e-mail , powyższa metoda zwróci credential-already-in-use
błąd.
Firebase zaleca w swojej dokumentacji następującą metodę .
var credential = firebase.auth.PhoneAuthProvider.credential(confirmationResult.verificationId, code);
firebase.auth().signInWithCredential(credential);
Zrobiłem to linkWithCredential
jednak razem, jednak signInWithCredential zwraca wynik zresult.credential = null
// Sign in user with the account you want to link to
auth.signInWithCredential(credential).then(function(result) {
console.log("Sign In Success", result);
var currentUser = result.user;
return prevUser.linkWithCredential(result.credential) //this line doesn't work.
.then(function(linkResult) {
return auth.signInWithCredential(linkResult.credential);
})
}).catch(function(error) {
console.log("Sign In Error", error);
});
Ponieważ result.credential = null, nie mogę kontynuować z LinkWithCredential.
Próbowałem też linkWithPhoneNumber
, ale zwraca identyfikator walidacji, którego nadal nie mogę połączyć konta.
❓ Czy mogę wiedzieć, jak połączyliście konto phoneNumber z innym kontem (Facebook / google / e-mail)?
Odpowiedzi
Jeśli chcesz połączyć istniejące konto z numerem telefonu, możesz użyć linkWithPhoneNumber
. Zasadniczo po zalogowaniu się użytkownika (powiedzmy w Google) pobierasz informacje o użytkowniku, a następnie łączysz te dane uwierzytelniające z numerem telefonu. Znalazłem tutaj szczegółową odpowiedź podobną do linku do pytania
Może coś takiego
const confirmationResult = await firebase.auth().currentUser.linkWithPhoneNumber(phoneNumber, recaptcha);
//Prompt your user for the code they recieved via sms here
confirmationResult.confirm(code);
gdzie masz użytkownika, który zalogował się za pomocą nazwy użytkownika / hasła, facebook google itp ... działałby?
Ponieważ nie otrzymujesz identyfikatora weryfikacyjnego z łączenia telefonu, ale raczej ConfirmationResult