Zanim zaczniesz używać emulatora Authentication z aplikacją, upewnij się, że znasz ogólny Firebase Local Emulator Suite przepływ pracy oraz że zainstalujesz i skonfigurujesz Local Emulator Suite i zapoznasz się z jego poleceniami interfejsu wiersza poleceń.
Zakładamy, że masz już doświadczenie w tworzeniu Firebase Authenticationrozwiązań na potrzeby środowiska produkcyjnego. W razie potrzeby zapoznaj się z dokumentacją dotyczącą kombinacji platformy i techniki uwierzytelniania.
Do czego służy Authentication emulator?
Authentication emulator zapewnia lokalną emulację usług Firebase Authentication o wysokiej wierności, udostępniając większość funkcji dostępnych w produkcyjnych Firebase Authentication. W połączeniu z platformami Apple, pakietami SDK Firebase na Androida i do klienta internetowego emulator umożliwia:
- Tworzenie, aktualizowanie i zarządzanie emulowanymi kontami użytkowników na potrzeby testowania uwierzytelniania za pomocą adresu e-mail i hasła, numeru telefonu i SMS-a, uwierzytelniania wielopoziomowego z użyciem SMS-ów oraz uwierzytelniania za pomocą zewnętrznego dostawcy tożsamości (np.Google).
- Wyświetlanie i edytowanie emulowanych użytkowników
- Tworzenie prototypów niestandardowych systemów uwierzytelniania tokenów
- Sprawdź komunikaty związane z uwierzytelnianiem na karcie Dzienniki interfejsu emulatora.
Wybieranie projektu Firebase
Firebase Local Emulator Suite emuluje usługi dla jednego projektu Firebase.
Aby wybrać projekt, którego chcesz używać, przed uruchomieniem emulatorów wpisz w CLI polecenie
firebase use
w katalogu roboczym. Możesz też przekazać flagę --project
do każdego polecenia emulatora.
Local Emulator Suite obsługuje emulację prawdziwych projektów Firebase i projektów demonstracyjnych.
Typ projektu | Funkcje | Korzystanie z emulatorami |
---|---|---|
Real |
Prawdziwy projekt Firebase to projekt, który został utworzony i skonfigurowany (najprawdopodobniej w Firebasekonsoli). Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, zasobniki pamięci, funkcje lub inne zasoby skonfigurowane w tym projekcie Firebase. |
Podczas pracy z prawdziwymi projektami Firebase możesz uruchamiać emulatory wszystkich obsługiwanych usług. W przypadku wszystkich usług, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcje z zasobem na żywo (instancją bazy danych, zasobnikiem pamięci, funkcją itp.). |
Prezentacja |
Projekt demonstracyjny Firebase nie ma prawdziwej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów uzyskuje się zwykle za pomocą ćwiczeń z programowania lub innych samouczków. Identyfikatory projektów demonstracyjnych mają prefiks |
Podczas pracy z demonstracyjnymi projektami Firebase aplikacje i kod wchodzą w interakcje tylko z emulatorami. Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego nie działa emulator, kod nie zadziała. |
Zalecamy korzystanie w miarę możliwości z projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:
- Łatwiejsza konfiguracja, ponieważ emulatory można uruchamiać bez tworzenia projektu Firebase.
- Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła zasoby nieemulowane (produkcyjne), nie ma możliwości zmiany danych, wykorzystania zasobów ani naliczenia opłat.
- Lepsza obsługa offline, ponieważ nie musisz uzyskiwać dostępu do internetu, aby pobrać konfigurację pakietu SDK.
Dostosuj aplikację, aby komunikowała się z emulatorem
Pakiety SDK na Androida, iOS i do przeglądarek
Skonfiguruj ustawienia w aplikacji lub klasy testowe, aby wchodzić w interakcje z emulatorem Authentication w ten sposób.
Kotlin
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Swift
Auth.auth().useEmulator(withHost:"127.0.0.1", port:9099)
Web
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://127.0.0.1:9099");
Web
const auth = firebase.auth(); auth.useEmulator("http://127.0.0.1:9099");
Nie musisz niczego dodatkowo konfigurować, aby tworzyć prototypy i testować interakcje między Authentication a Cloud Functions lub Firebase Security Rules w przypadku Cloud Firestore lub Realtime Database. Gdy Authenticationemulator jest skonfigurowany i działają inne emulatory, automatycznie współpracują ze sobą.
Admin SDK s
Firebase Admin SDK automatycznie łączą się z emulatorem Authentication, gdy ustawiona jest zmienna środowiskowa FIREBASE_AUTH_EMULATOR_HOST
.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Pamiętaj, że emulator Cloud Functions automatycznie wykrywa emulator Authentication, więc możesz pominąć ten krok podczas testowania integracji między emulatorami Cloud Functions i Authentication. Zmienna środowiskowa zostanie automatycznie ustawiona dla Admin SDK w Cloud Functions.
Po ustawieniu zmiennej środowiskowej funkcja Firebase Admin SDKs będzie akceptować niepodpisane tokeny identyfikacyjne i pliki cookie sesji wydane przez emulator Authentication (odpowiednio za pomocą metod verifyIdToken
i createSessionCookie
), aby ułatwić lokalne programowanie i testowanie. Pamiętaj, aby nie ustawiać zmiennej środowiskowej w środowisku produkcyjnym.
Jeśli chcesz, aby kod Admin SDK łączył się ze współdzielonym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą wiersza poleceń Firebase. Identyfikator projektu możesz przekazać initializeApp
bezpośrednio lub ustawić zmienną środowiskową GCLOUD_PROJECT
.
Pakiet Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"
Tokeny identyfikatora
Ze względów bezpieczeństwa emulator Authentication wydaje niepodpisane tokeny identyfikatora, które są akceptowane tylko przez inne emulatory Firebase lub pakiet SDK administratora Firebase, gdy jest on skonfigurowany. Te tokeny będą odrzucane przez usługi Firebase w wersji produkcyjnej lub pakiet Firebase Admin SDK działający w trybie produkcyjnym (np. domyślne działanie bez opisanych powyżej kroków konfiguracji).
Uruchamianie emulatora
Możesz używać Authentication emulatora interaktywnie za pomocą Emulator Suite UI oraz nieinteraktywnie za pomocą lokalnego interfejsu REST. W kolejnych sekcjach omówimy przypadki użycia interaktywne i nieinteraktywne.
Aby uruchomić Authenticationemulator, jego interfejs REST i Emulator Suite UI, wykonaj to polecenie:
firebase emulators:start
Emulowany adres e-mail, link w e-mailu i uwierzytelnianie anonimowe
W przypadku anonimowego uwierzytelniania aplikacja może korzystać z logiki logowania na Twojej platformie (iOS, Android, internet).
W przypadku uwierzytelniania za pomocą adresu e-mail i hasła możesz rozpocząć tworzenie prototypu, dodając konta użytkowników do Authentication emulatora z aplikacji za pomocą Authentication metod pakietu SDK lub korzystając z Emulator Suite UI.
- W sekcji Emulator Suite UI kliknij kartę Uwierzytelnianie.
- Kliknij przycisk Dodaj użytkownika.
- Postępuj zgodnie z instrukcjami kreatora tworzenia konta użytkownika, wypełniając pola uwierzytelniania e-mail.
Po utworzeniu użytkownika testowego aplikacja może logować go i wylogowywać za pomocą logiki pakietu SDK dla Twojej platformy (iOS, Android, internet).
Aby przetestować weryfikację adresu e-mail lub logowanie za pomocą linku w e-mailu, emulator wyświetla w terminalu adres URL, pod którym wykonano polecenie firebase emulators:start
.
i To verify the email address customer@ex.com, follow this link:
http://127.0.0.1:9099/emulator/action?mode=verifyEmail&lang=en&oobCode=XYZ123&apiKey=fake-api-key
Wklej link do przeglądarki, aby zasymulować zdarzenie weryfikacji, i sprawdź, czy weryfikacja się powiodła.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Podczas testowania resetowania hasła emulator wyświetla w terminalu podobny adres URL, w tym parametr newPassword (który możesz w razie potrzeby zmienić).
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
Testowanie nieinteraktywne
Zamiast używać kodu Emulator Suite UI lub kodu klienta do zarządzania kontami użytkowników z adresem e-mail i hasłem, możesz napisać skrypty konfiguracji testu, które wywołują interfejsy API REST, aby tworzyć i usuwać konta użytkowników oraz pobierać kody weryfikacji e-mail poza pasmem, aby wypełniać adres URL weryfikacji e-mail w emulatorze. Dzięki temu kod platformy i kod testu są od siebie oddzielone, a testowanie może odbywać się w sposób nieinteraktywny.
W przypadku nieinteraktywnych testów adresu e-mail i hasła typowa sekwencja jest następująca:
- Twórz użytkowników za pomocą Authentication punktu końcowego REST signUp.
- Loguj użytkowników za pomocą adresów e-mail i haseł, aby przeprowadzać testy.
- Jeśli ma to zastosowanie w przypadku Twoich testów, pobierz dostępne kody weryfikacji e-mail poza pasmem z punktu końcowego REST specyficznego dla emulatora.
- Usuń rekordy użytkowników za pomocą punktu końcowego REST specyficznego dla emulatora, aby wyczyścić dane.
Uwierzytelnianie za pomocą emulowanego telefonu lub SMS-a
W przypadku uwierzytelniania przez telefon emulator uwierzytelniania nie obsługuje:
- Przepływy reCAPTCHA i APN. Po skonfigurowaniu interakcji z emulatorem pakiety SDK klienta wyłączają te metody weryfikacji w sposób podobny do opisanego w przypadku testów integracyjnych (iOS, Android, internet).
- Testuj numery telefonów z kodami wstępnie skonfigurowanymi w Firebase konsoli.
W przypadku kodu klienta proces uwierzytelniania za pomocą telefonu lub SMS-a jest identyczny z opisanym w przypadku środowiska produkcyjnego (iOS, Android, internet).
Korzystanie z Emulator Suite UI:
- W sekcji Emulator Suite UI kliknij kartę Uwierzytelnianie.
- Kliknij przycisk Dodaj użytkownika.
- Postępuj zgodnie z instrukcjami kreatora tworzenia konta użytkownika, wypełniając pola uwierzytelniania za pomocą telefonu.
W przypadku przepływów uwierzytelniania za pomocą telefonu emulator NIE będzie jednak wywoływać dostarczania żadnych SMS-ów, ponieważ kontaktowanie się z operatorem jest poza zakresem i nie jest odpowiednie do testowania lokalnego. Zamiast tego emulator wyświetla kod, który zostałby wysłany SMS-em na ten sam terminal, na którym uruchomiono firebase emulators:start
. Wpisz ten kod w aplikacji, aby zasymulować sprawdzanie wiadomości tekstowych przez użytkowników.
Testowanie nieinteraktywne
Do testowania nieinteraktywnej weryfikacji numeru telefonu użyj interfejsu API REST Authenticationemulatora, aby pobrać dostępne kody SMS. Pamiętaj, że kod jest inny za każdym razem, gdy rozpoczynasz ten proces.
Typowa kolejność jest następująca:
- Zadzwoń na platformę
signInWithPhoneNumber
, aby rozpocząć proces weryfikacji. - Pobierz kod weryfikacyjny za pomocą punktu końcowego REST specyficznego dla emulatora.
- Zadzwoń pod numer
confirmationResult.confirm(code)
jak zwykle, podając kod weryfikacyjny.
Uwierzytelnianie wielopoziomowe przy użyciu SMS-ów
Authentication Emulator obsługuje prototypowanie i testowanie przepływów uwierzytelniania wielopoziomowego za pomocą SMS-ów, które są dostępne w wersji produkcyjnej na iOS, Androida i w internecie.
Gdy dodasz do emulatora użytkownika testowego, możesz włączyć uwierzytelnianie wielopoziomowe i skonfigurować co najmniej 1 numer telefonu, na który będą wysyłane SMS-y z 2. poziomem uwierzytelniania. Wiadomości są wysyłane do tego samego terminala, w którym uruchomiono polecenie firebase emulators:start
, i są dostępne w interfejsie REST.
Emulowane uwierzytelnianie zewnętrznego dostawcy tożsamości
Authentication Emulator umożliwia testowanie wielu przepływów uwierzytelniania innych firm w aplikacjach na iOS, Androida i w aplikacjach internetowych bez wprowadzania zmian w kodzie produkcyjnym. Przykłady przepływów uwierzytelniania znajdziesz w dokumentacji różnych kombinacji dostawców i platform, których możesz używać w swojej aplikacji.
Ogólnie rzecz biorąc, pakietu SDK Firebase możesz używać do uwierzytelniania na 2 sposoby:
- Aplikacja umożliwia pakietowi SDK obsługę całego procesu, w tym wszystkich interakcji z zewnętrznymi dostawcami tożsamości w celu pobrania danych logowania.
- Aplikacja ręcznie pobiera dane logowania od zewnętrznego dostawcy za pomocą jego pakietu SDK i przekazuje je do pakietu SDK Authentication.
Ponownie sprawdź link do dokumentacji powyżej i upewnij się, że znasz wybrany przez siebie proces – zarządzany przez pakiet Firebase SDK lub ręczne pobieranie danych logowania. Authentication emulator obsługuje testowanie obu tych metod.
Testowanie przepływów dostawcy tożsamości opartych na pakiecie Firebase SDK
Jeśli Twoja aplikacja korzysta z dowolnego kompleksowego przepływu pakietu SDK Firebase, np. OAuthProvider
logowania się za pomocą konta Microsoft, GitHub lub Yahoo, emulator Authentication
udostępnia lokalną wersję odpowiedniej strony logowania, aby ułatwić Ci interaktywne testowanie uwierzytelniania w aplikacjach internetowych, które wywołują metodę signinWithPopup
lub signInWithRedirect
. Ta strona logowania wyświetlana lokalnie pojawia się też w aplikacjach mobilnych, renderowana przez bibliotekę widoku internetowego platformy.
W miarę postępu procesów emulator tworzy w razie potrzeby przykładowe konta użytkowników i dane logowania innych firm.
Testowanie przepływów dostawcy tożsamości z ręcznym pobieraniem danych logowania
Jeśli używasz „ręcznych” technik logowania i wywołujesz metodę signInWithCredentials
platformy, aplikacja poprosi o prawdziwe logowanie przez zewnętrzną usługę i pobierze prawdziwe dane logowania z tej usługi.
Pamiętaj, że emulator obsługuje tylko signInWithCredential
uwierzytelnianiesignInWithCredential
w przypadku danych logowania pobranych z usługi Logowanie przez Google, Apple i innych dostawców, którzy używają tokenów tożsamości zaimplementowanych jako tokeny sieciowe JSON (JWT). Tokeny dostępu (np. te udostępniane przez Facebooka lub Twittera, które nie są tokenami JWT) nie są obsługiwane. W następnej sekcji omówimy alternatywne rozwiązanie w takich przypadkach.
Testowanie nieinteraktywne
Jednym ze sposobów testowania bez interakcji jest automatyzacja kliknięć użytkownika na stronie logowania wyświetlanej przez emulator. W przypadku aplikacji internetowych używaj interfejsu sterowania, takiego jak WebDriver. W przypadku urządzeń mobilnych użyj narzędzi do testowania interfejsu platformy, np. Espresso lub Xcode.
Możesz też zaktualizować kod, aby używać signInWithCredential
(np. w gałęzi kodu) i zamiast prawdziwych danych logowania używać przepływu uwierzytelniania za pomocą tokena z mockowanymi tokenami identyfikatora dla kont.
- Zmień lub zakomentuj część kodu, która pobiera tokeny identyfikatora od dostawcy tożsamości. Dzięki temu nie musisz wpisywać prawdziwych nazw użytkowników i haseł podczas testów, a testy nie będą podlegać limitom interfejsu API ani limitom szybkości u dostawcy tożsamości.
- Po drugie, użyj literału ciągu JSON zamiast tokena dla
signInWithCredential
. Na przykład w przypadku pakietu SDK na potrzeby internetu możesz zmienić kod na:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
Gdy ten kod jest używany z emulatorem, umożliwia on uwierzytelnienie użytkownika za pomocą adresu e-mail foo@example.com
w Google. Pole sub jest kluczem podstawowym, który można zmienić na dowolny ciąg znaków, symulując logowanie różnych użytkowników. Możesz zastąpić firebase.auth.GoogleAuthProvider
np. wartością new firebase.auth.OAuthProvider('yahoo.com')
lub dowolnym innym identyfikatorem dostawcy, który chcesz symulować.
Emulowane uwierzytelnianie za pomocą niestandardowego tokena
Emulator Authentication obsługuje uwierzytelnianie za pomocą niestandardowych tokenów internetowych JSON, wywołując metodę signInWithCustomToken
na obsługiwanych platformach, zgodnie z opisem w dokumentacji Authentication wersji produkcyjnej.
Różnice między emulatorem Authentication a wersją produkcyjną
Emulator Firebase Authentication symuluje wiele funkcji usługi produkcyjnej. Jednak ponieważ każdy system uwierzytelniania w dużym stopniu zależy od bezpieczeństwa na wielu poziomach (urządzenie, dostawcy zewnętrzni, Firebase itp.), emulatorowi trudno jest prawidłowo odtworzyć wszystkie procesy.
Cloud IAM
Pakiet emulatorów Firebase nie próbuje replikować ani uwzględniać żadnych zachowań związanych z IAM podczas działania. Emulatory są zgodne z podanymi regułami zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używa się IAM, np. do ustawienia konta usługi wywołującej Cloud Functions, a tym samym uprawnień, emulator nie jest konfigurowalny i będzie używać globalnie dostępnego konta na komputerze dewelopera, podobnie jak w przypadku bezpośredniego uruchamiania lokalnego skryptu.
Logowanie za pomocą linku w e-mailu na urządzeniu mobilnym
Ponieważ na platformach mobilnych logowanie za pomocą linku w e-mailu opiera się na Linkach dynamicznych Firebase, wszystkie takie linki będą otwierane na platformie internetowej (mobilnej).
Logowanie przez inną usługę
W przypadku procesów logowania przez usługę zewnętrzną Firebase Authentication korzysta z bezpiecznych danych logowania od dostawców zewnętrznych, takich jak Twitter i GitHub.
Emulator Authentication akceptuje prawdziwe dane logowania od dostawców OpenID Connect, takich jak Google i Apple. Dane logowania od dostawców innych niż OpenID Connect nie są obsługiwane.
Logowanie za pomocą adresu e-mail lub SMS-a
W aplikacjach produkcyjnych przepływy logowania za pomocą e-maila i SMS-a obejmują operację asynchroniczną, w której użytkownik sprawdza otrzymaną wiadomość i wpisuje kod logowania w interfejsie logowania. AuthenticationEmulator nie wysyła żadnych e-maili ani SMS-ów, ale zgodnie z opisem powyżej generuje kody logowania i wyświetla je w terminalu, aby można było ich używać podczas testowania.
Emulator nie obsługuje możliwości definiowania testowych numerów telefonów ze stałymi kodami logowania, tak jak można to zrobić za pomocą konsoli Firebase.
Uwierzytelnianie za pomocą tokena niestandardowego
Emulator Authentication nie weryfikuje podpisu ani daty ważności niestandardowych tokenów. Dzięki temu możesz używać ręcznie tworzonych tokenów i ponownie wykorzystywać je w scenariuszach prototypowania i testowania.
Ograniczanie liczby żądań / zapobieganie nadużyciom
Emulator Authentication nie odtwarza ograniczeń liczby żądań ani funkcji zapobiegających nadużyciom.
Funkcje blokowania
W środowisku produkcyjnym użytkownicy są zapisywani w pamięci masowej tylko raz, po wywołaniu zdarzeń beforeCreate
i beforeSignIn
. Ze względu na ograniczenia techniczne emulator Authentication zapisuje dane w pamięci 2 razy: raz po utworzeniu użytkownika i raz po zalogowaniu się. Oznacza to, że w przypadku nowych użytkowników możesz z powodzeniem wywołać funkcję
getAuth().getUser()
w beforeSignIn
w Authentication emulatorze, ale w środowisku produkcyjnym napotkasz błąd.
Co dalej?
Zestaw wyselekcjonowanych filmów i szczegółowych instrukcji z przykładami znajdziesz na playliście szkoleń na temat emulatorów Firebase.
Funkcje wywoływane przez zdarzenia są typową integracją z Authentication. Więcej informacji o emulatorze Cloud Functions dla Firebase znajdziesz w artykule Uruchamianie funkcji lokalnie.