Za pomocą Firebase Authentication możesz zalogować użytkownika, wysyłając SMS-a do telefonu użytkownika. Użytkownik loguje się za pomocą jednorazowego kodu zawartego w SMS.
Najprostszym sposobem dodania logowania przez numer telefonu do aplikacji jest użycie FirebaseUI, który zawiera widżet logowania, który obsługuje proces logowania się na telefonie logowania numerycznego oraz sfederowanego i za pomocą hasła. Ten dokument opisuje, jak wdrożyć proces logowania przez numer telefonu za pomocą pakietu SDK Firebase.
Zanim zaczniesz
Skopiuj fragment kodu inicjowania z sekcji Firebase konsolę do swojego projektu, jak opisano w sekcji . Dodaj Firebase do projektu JavaScript.Potencjalne problemy z bezpieczeństwem
Uwierzytelnianie przy użyciu numeru telefonu, choć jest wygodne, jest mniej bezpieczne niż inne dostępne metody, ponieważ posiadanie numeru telefonu można łatwo przenosić między użytkownikami. Także na urządzeniach z wieloma użytkownikami profili, każdy użytkownik, który może odbierać wiadomości SMS, może zalogować się na konto przy użyciu z numerem telefonu urządzenia.
Jeśli w aplikacji korzystasz z logowania się na podstawie numeru telefonu, z bezpieczniejszymi metodami logowania oraz informować użytkowników logowanie się przy użyciu numeru telefonu.
Włączanie logowania się za pomocą numeru telefonu w projekcie Firebase
Aby logować użytkowników za pomocą SMS-ów, musisz najpierw włączyć logowanie się przy użyciu numeru telefonu do swojego projektu Firebase:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na stronie Sign-in Method (Metoda logowania) włącz Phone Number. metody logowania się.
- Jeśli na tej samej stronie domeny hostującej aplikację nie ma w W sekcji Domeny przekierowania OAuth dodaj swoją domenę. Pamiętaj, że host localhost nie może być hostowany domeny na potrzeby uwierzytelniania przez telefon.
Konfigurowanie weryfikatora reCAPTCHA
Aby móc logować się użytkowników za pomocą ich numerów telefonów, musisz skonfigurować Weryfikator reCAPTCHA w Firebase. Firebase używa reCAPTCHA, aby zapobiegać nadużyciom, takim jak: upewniając się, że prośba o weryfikację numeru telefonu pochodzi od jednego z aplikacji z dozwolonymi domenami.
Nie musisz ręcznie konfigurować klienta reCAPTCHA. w przypadku użycia funkcji
obiekt RecaptchaVerifier
pakietu SDK Firebase, Firebase automatycznie
tworzy i obsługuje niezbędne klucze i tajne klucze klienta.
Obiekt RecaptchaVerifier
obsługuje
niewidoczne
reCAPTCHA, który często pozwala zweryfikować użytkownika bez konieczności jego dodawania;
działanie oraz widżet reCAPTCHA, który zawsze wymaga interakcji użytkownika.
, aby zakończyć.
Bazową wyrenderowaną wersję reCAPTCHA można zlokalizować zgodnie z preferencjami użytkownika, aktualizując w instancji Auth przed wyrenderowaniem reCAPTCHA. Wspomniana lokalizacja będzie również stosowany do SMS-ów z kodem weryfikacyjnym wysłanych do użytkownika.
Web
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // auth.useDeviceLanguage();
Web
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
Użyj niewidocznego reCAPTCHA
Aby użyć niewidocznego reCAPTCHA, utwórz obiekt RecaptchaVerifier
z parametrem size
ustawionym na invisible
, który określa
identyfikator przycisku, który przesyła formularz logowania. Przykład:
Web
import { getAuth, RecaptchaVerifier } from "firebase/auth"; const auth = getAuth(); window.recaptchaVerifier = new RecaptchaVerifier(auth, 'sign-in-button', { 'size': 'invisible', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. onSignInSubmit(); } });
Web
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('sign-in-button', { 'size': 'invisible', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. onSignInSubmit(); } });
Używanie widżetu reCAPTCHA
Aby użyć widocznego widżetu reCAPTCHA, utwórz na stronie element, który:
a następnie utworzyć obiekt RecaptchaVerifier
,
podczas konfigurowania identyfikatora kontenera. Na przykład:
Web
import { getAuth, RecaptchaVerifier } from "firebase/auth"; const auth = getAuth(); window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', {});
Web
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');
Opcjonalnie: określ parametry reCAPTCHA
Opcjonalnie możesz ustawić funkcje wywołania zwrotnego na
obiekt RecaptchaVerifier
, który jest wywoływany, gdy użytkownik rozwiązuje
reCAPTCHA lub reCAPTCHA wygaśnie, zanim użytkownik prześle formularz:
Web
import { getAuth, RecaptchaVerifier } from "firebase/auth"; const auth = getAuth(); window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', { 'size': 'normal', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. // ... }, 'expired-callback': () => { // Response expired. Ask user to solve reCAPTCHA again. // ... } });
Web
window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container', { 'size': 'normal', 'callback': (response) => { // reCAPTCHA solved, allow signInWithPhoneNumber. // ... }, 'expired-callback': () => { // Response expired. Ask user to solve reCAPTCHA again. // ... } });
Opcjonalnie: wstępne renderowanie reCAPTCHA
Jeśli chcesz wstępnie wyrenderować reCAPTCHA przed przesłaniem prośby o logowanie,
zadzwoń do render
:
Web
recaptchaVerifier.render().then((widgetId) => { window.recaptchaWidgetId = widgetId; });
Web
recaptchaVerifier.render().then((widgetId) => { window.recaptchaWidgetId = widgetId; });
Po rozwiązaniu problemu render
otrzymasz identyfikator widżetu reCAPTCHA, który
możesz używać do nawiązywania połączeń
Interfejs API reCAPTCHA:
Web
const recaptchaResponse = grecaptcha.getResponse(recaptchaWidgetId);
Web
const recaptchaResponse = grecaptcha.getResponse(recaptchaWidgetId);
Wysyłanie kodu weryfikacyjnego na telefon użytkownika
Aby rozpocząć logowanie za pomocą numeru telefonu, użyj interfejsu z prośbą o wyświetlenie prośby
podać swój numer telefonu, a następnie zadzwonić
signInWithPhoneNumber
, aby poprosić Firebase o wysłanie
przy użyciu SMS-a z kodem uwierzytelniającym:
-
Uzyskaj numer telefonu użytkownika.
Wymagania prawne są różne, ale jest to sprawdzona metoda i określać oczekiwania użytkowników, należy ich poinformować, przez telefon, mogą otrzymać SMS-a w celu weryfikacji i standardowego obowiązują opłaty.
- Zadzwoń pod numer
signInWithPhoneNumber
, przekazując na telefon użytkownika orazRecaptchaVerifier
utworzone wcześniej.Web
import { getAuth, signInWithPhoneNumber } from "firebase/auth"; const phoneNumber = getPhoneNumberFromUserInput(); const appVerifier = window.recaptchaVerifier; const auth = getAuth(); signInWithPhoneNumber(auth, phoneNumber, appVerifier) .then((confirmationResult) => { // SMS sent. Prompt user to type the code from the message, then sign the // user in with confirmationResult.confirm(code). window.confirmationResult = confirmationResult; // ... }).catch((error) => { // Error; SMS not sent // ... });
Web
const phoneNumber = getPhoneNumberFromUserInput(); const appVerifier = window.recaptchaVerifier; firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier) .then((confirmationResult) => { // SMS sent. Prompt user to type the code from the message, then sign the // user in with confirmationResult.confirm(code). window.confirmationResult = confirmationResult; // ... }).catch((error) => { // Error; SMS not sent // ... });
signInWithPhoneNumber
powoduje błąd, zresetuj reCAPTCHA, aby użytkownik mógł spróbować ponownie:grecaptcha.reset(window.recaptchaWidgetId); // Or, if you haven't stored the widget ID: window.recaptchaVerifier.render().then(function(widgetId) { grecaptcha.reset(widgetId); });
Metoda signInWithPhoneNumber
generuje test reCAPTCHA
a jeśli użytkownik zda test, poprosi o
Firebase Authentication wyśle SMS-a z kodem weryfikacyjnym do
z telefonu użytkownika.
Logowanie użytkownika za pomocą kodu weryfikacyjnego
Po pomyślnym wywołaniu signInWithPhoneNumber
pojawi się prośba
wpisanie kodu weryfikacyjnego otrzymanego w wiadomości SMS. Następnie zaloguj użytkownika
przekazując kod do metody confirm
funkcji
ConfirmationResult
obiekt, który został przekazany do
moduł obsługi realizacji zamówienia signInWithPhoneNumber
(czyli jego
then
– blokada). Przykład:
Web
const code = getCodeFromUserInput(); confirmationResult.confirm(code).then((result) => { // User signed in successfully. const user = result.user; // ... }).catch((error) => { // User couldn't sign in (bad verification code?) // ... });
Web
const code = getCodeFromUserInput(); confirmationResult.confirm(code).then((result) => { // User signed in successfully. const user = result.user; // ... }).catch((error) => { // User couldn't sign in (bad verification code?) // ... });
Jeśli udało się wywołać metodę confirm
, użytkownik został pomyślnie wywołany.
Użytkownik jest zalogowany.
Pobieranie pośredniego obiektu AuthCredential
Jeśli musisz pobrać obiekt AuthCredential
dla
podaj kod weryfikacyjny z wyniku potwierdzenia oraz
kod weryfikacyjny na numer PhoneAuthProvider.credential
zamiast
dzwoni do: confirm
:
var credential = firebase.auth.PhoneAuthProvider.credential(confirmationResult.verificationId, code);
Następnie możesz zalogować użytkownika za pomocą danych logowania:
firebase.auth().signInWithCredential(credential);
Testowanie za pomocą fikcyjnych numerów telefonów
W konsoli Firebase możesz skonfigurować fikcyjne numery telefonów na potrzeby programowania. Testowanie na fikcyjnym telefonie ma następujące korzyści:
- Przetestuj uwierzytelnianie za pomocą numeru telefonu bez przekraczania limitu wykorzystania.
- Przetestuj uwierzytelnianie numeru telefonu bez wysyłania faktycznego SMS-a.
- Przeprowadzaj kolejne testy z tym samym numerem telefonu bez ograniczania limitu. Ten minimalizuje ryzyko odrzucenia aplikacji podczas procesu sprawdzania w Sklepie z aplikacjami, jeśli weryfikator ten sam numer telefonu do przetestowania.
- Możesz łatwo przeprowadzać testy w środowiskach programistycznych bez dodatkowych działań, takich jak: możliwość programowania w symulatorze iOS lub w emulatorze Androida bez Usług Google Play.
- Zapis testów integracji bez blokowania przez testy zabezpieczeń, które normalnie są stosowane przy użyciu prawdziwych numerów telefonów w środowisku produkcyjnym.
Fikcyjne numery telefonów muszą spełniać te wymagania:
- Upewnij się, że używane numery telefonów są fałszywe i nie istnieją. Operator Firebase Authentication nie umożliwia ustawiania istniejących numerów telefonów, których używają rzeczywisti użytkownicy jako numerów testowych. Jedną z opcji jest użycie 555 numerów z prefiksem jako testowych numerów telefonów w USA, na przykład: +1 650-555-3434
- Numery telefonów muszą być poprawnie sformatowane pod kątem długości i innych parametrów . Nadal przechodzą one taką samą weryfikację jak numer telefonu rzeczywistego użytkownika.
- Możesz dodać maksymalnie 10 numerów telefonów na potrzeby programowania.
- Używaj testowych numerów telefonów lub kodów, które są trudne do odgadnięcia i zmiany. i to często.
Tworzenie fikcyjnych numerów telefonów i kodów weryfikacyjnych
- W konsoli Firebase otwórz Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę telefonu, jeśli nie jest jeszcze włączony.
- Otwórz menu nawigacyjne Numery telefonów do testowania.
- Podaj numer telefonu, który chcesz przetestować, np. +1 650-555-3434.
- Podaj 6-cyfrowy kod weryfikacyjny tego numeru, np. 654321.
- Dodaj numer. W razie potrzeby możesz usunąć numer telefonu swojego kodu, najeżdżając kursorem na odpowiedni wiersz i klikając ikonę kosza.
Testy ręczne
Możesz od razu zacząć używać fikcyjnego numeru telefonu we wniosku. Dzięki temu możesz: przeprowadzaj testy ręczne na etapach programowania, aby uniknąć problemów z limitami i ich ograniczania. Możesz też przeprowadzać testy bezpośrednio w symulatorze iOS lub w emulatorze Androida bez Usług Google Play. Zainstalowano.
Po podaniu fikcyjnego numeru telefonu i wysłaniu kodu weryfikacyjnego SMS nie zostanie wysłany wysłano. Zamiast tego, aby dokończyć podpisywanie, musisz podać wcześniej skonfigurowany kod weryfikacyjny cal
Gdy się zalogujesz, zostanie utworzony użytkownik Firebase z tym numerem telefonu. działa i ma takie samo zachowanie jak prawdziwy użytkownik numeru telefonu oraz ma dostęp do Realtime Database/Cloud Firestore z innymi usługami w ten sam sposób. Token tożsamości wygenerowany podczas ten proces ma taki sam podpis jak prawdziwy użytkownik numeru telefonu.
Inną możliwością jest ustawienie roli testowej za pomocą niestandardowej dotyczące tych użytkowników, aby odróżnić ich jako fałszywych użytkowników, jeśli chcesz dostęp.
Testowanie integracji
Oprócz testowania ręcznego Firebase Authentication udostępnia interfejsy API, które ułatwiają pisanie testów integracji do testowania uwierzytelniania przez telefon. Te interfejsy API wyłączają weryfikację aplikacji przez wyłączenie reCAPTCHA są wymagane w przypadku aplikacji internetowych i ciche powiadomienia push w iOS. Umożliwia to testowanie automatyzacji i łatwiejsze ich wdrożenie. Zapewniają też możliwość testowania aplikacji błyskawicznych proces weryfikacji na Androidzie.
W przeglądarce ustaw appVerificationDisabledForTesting
na
true
przed wyrenderowaniem obiektu firebase.auth.RecaptchaVerifier
. To rozwiązuje
reCAPTCHA w sposób automatyczny, dzięki czemu możesz przekazać numer telefonu bez wpisywania go ręcznie. Notatka
że pomimo wyłączenia reCAPTCHA przy użyciu niefikcyjnego numeru telefonu nie uda się
dokończ logowanie. Za pomocą tego interfejsu API można używać tylko fikcyjnych numerów telefonów.
// Turn off phone auth app verification. firebase.auth().settings.appVerificationDisabledForTesting = true; var phoneNumber = "+16505554567"; var testVerificationCode = "123456"; // This will render a fake reCAPTCHA as appVerificationDisabledForTesting is true. // This will resolve after rendering without app verification. var appVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container'); // signInWithPhoneNumber will call appVerifier.verify() which will resolve with a fake // reCAPTCHA response. firebase.auth().signInWithPhoneNumber(phoneNumber, appVerifier) .then(function (confirmationResult) { // confirmationResult can resolve with the fictional testVerificationCode above. return confirmationResult.confirm(testVerificationCode) }).catch(function (error) { // Error; SMS not sent // ... });
Widoczne i niewidoczne pozorowane testy aplikacji reCAPTCHA zachowują się inaczej, gdy weryfikacja aplikacji jest przeprowadzona w inny sposób wyłączone:
- Widoczna reCAPTCHA: gdy widoczna reCAPTCHA jest renderowana przez
appVerifier.render()
, automatycznie zamyka się po ułamku sekundy opóźnienia. Jest to równoważne z kliknięciem przez użytkownika reCAPTCHA zaraz po wyrenderowaniu. reCAPTCHA odpowiedź wygaśnie po pewnym czasie, a następnie zostanie automatycznie rozwiązana ponownie. - Niewidoczna reCAPTCHA:
Niewidoczna reCAPTCHA nie wykrywa automatycznie odpowiedzi podczas renderowania, ale robi to na
appVerifier.verify()
lub gdy kotwica przycisku reCAPTCHA jest kliknięto po ułamku sekundy. Analogicznie odpowiedź wygaśnie po pewnym czasie, zostanie rozwiązany automatycznie tylko po wywołaniuappVerifier.verify()
lub gdy kotwica przycisku reCAPTCHA została kliknięta ponownie.
Po zakończeniu testu reCAPTCHA w sposób zgodny z oczekiwaniami uruchamiana jest odpowiednia funkcja wywołania zwrotnego z fałszywą odpowiedzią. Jeśli określisz także wywołanie zwrotne o dacie wygaśnięcia, zostanie ono aktywowane po wygaśnięciu.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika. powiązane z danymi logowania, czyli z nazwą użytkownika, hasłem i numerem telefonu, numer telefonu lub informacje o dostawcy uwierzytelniania – użytkownik zalogowany. Ten nowy jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się loguje.
-
Aby poznać stan uwierzytelniania użytkownika w swoich aplikacjach, ustaw obserwatora na obiekcie
Auth
. Dzięki temu możesz uzyskać dane użytkownika podstawowych informacji o profilu z obiektuUser
. Zobacz Zarządzanie użytkownikami Na liście Firebase Realtime Database i Cloud Storage regułami zabezpieczeń, pobierz ze zmiennej
auth
unikalny identyfikator zalogowanego użytkownika, i używać ich do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielokrotnego uwierzytelniania. dostawców, łącząc dane logowania dostawcy uwierzytelniania z istniejącego konta użytkownika.
Aby wylogować użytkownika, wywołaj
signOut
:
Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });