Zanim zaczniesz używać emulatora Authentication w swojej aplikacji, zapoznaj się z ogólnym procesem korzystania z Firebase Local Emulator Suite. Zainstaluj i skonfiguruj Local Emulator Suite oraz zapoznaj się z jego poleceniami CLI.
W tym artykule zakładamy, że znasz już proces tworzenia Firebase Authentication rozwiązań na potrzeby środowiska produkcyjnego. W razie potrzeby zapoznaj się z dokumentacją dotyczącą połączenia platformy i metody uwierzytelniania.
Co mogę zrobić za pomocą emulatora Authentication?
Emulator Authentication zapewnia lokalną emulację usług Firebase Authentication o wysokiej wierności, udostępniając większość funkcji dostępnych w produkcyjnej wersji Firebase Authentication. W połączeniu z pakietami SDK Firebase na platformy Apple, Androida i w przeglądarce 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 za pomocą SMS-a oraz uwierzytelniania za pomocą zewnętrznego dostawcy tożsamości (np. Google);
- wyświetlanie i edytowanie emulowanych użytkowników;
- tworzenie prototypów systemów uwierzytelniania za pomocą tokenów niestandardowych;
- sprawdzanie komunikatów związanych z uwierzytelnianiem na karcie Dzienniki w interfejsie emulatora.
Wybieranie projektu w Firebase
Firebase Local Emulator Suite emuluje produkty dla jednego projektu w 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 demonstracyjnych projektów.
| Typ projektu | Funkcje | Używanie z emulatorami |
|---|---|---|
| Prawdziwy |
Prawdziwy projekt w Firebase to projekt, który został utworzony i skonfigurowany (najprawdopodobniej przez konsolę Firebase). Prawdziwe projekty mają aktywne zasoby, takie jak instancje bazy 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 usług, które nie są emulowane, Twoje aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancją bazy danych, zasobnikiem pamięci, funkcją itp.). |
| Demonstracyjny |
Demonstracyjny projekt w Firebase nie ma prawdziwej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów jest zwykle uzyskiwany za pomocą warsztatów programistycznych lub innych samouczków. Identyfikatory projektów demonstracyjnych mają prefiks |
Podczas pracy z demonstracyjnymi projektami Firebase Twoje aplikacje i kod wchodzą w interakcje z emulatorami tylko. Jeśli aplikacja spróbuje wejść w interakcję z zasobem dla którego nie jest uruchomiony emulator, kod nie zadziała. |
Jeśli to możliwe, zalecamy używanie projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:
- łatwiejsza konfiguracja, ponieważ możesz uruchamiać emulatory bez tworzenia projektu w Firebase;
- większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane (produkcyjne) zasoby, nie będzie możliwości zmiany danych, użycia ani rozliczenia;
- lepsza obsługa offline, ponieważ nie musisz uzyskiwać dostępu do internetu, aby pobrać konfigurację pakietu SDK.
Instrumentowanie aplikacji do komunikacji z emulatorem
Pakiety SDK na Androida, iOS i w przeglądarce
Skonfiguruj klasy testowe lub konfigurację w aplikacji tak, aby wchodziły w interakcje z Authentication emulatorem 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)
Unity
FirebaseAuth auth = FirebaseAuth.DefaultInstance; // Connects to the Auth Emulator running on port 9099 auth.UseEmulator("127.0.0.1", 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 dla Cloud Firestore lub Realtime Database. Gdy emulator Authentication jest skonfigurowany, a inne emulatory są uruchomione, automatycznie współpracują ze sobą.
Admin SDKs
Pakiety 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 podczas testowania integracji między emulatorami Cloud Functions i Authentication możesz pominąć ten krok. Zmienna środowiskowa zostanie automatycznie ustawiona w Admin SDK w Cloud Functions.
Gdy zmienna środowiskowa jest ustawiona, Firebase Admin SDK będą akceptować niepodpisane identyfikatory
tokenów i pliki cookie sesji wydane przez emulator Authentication (odpowiednio za pomocą metod verifyIdToken
i createSessionCookie), aby ułatwić lokalne tworzenie
i testowanie. Pamiętaj, aby nie ustawiać zmiennej środowiskowej w środowisku produkcyjnym.
Jeśli chcesz, aby kod Admin SDK łączył się z udostępnionym 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ć bezpośrednio do initializeApp 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"
Identyfikatory tokenów
Ze względów bezpieczeństwa emulator Authentication wydaje niepodpisane identyfikatory tokenów, które są akceptowane tylko przez inne emulatory Firebase lub pakiet Firebase Admin SDK, gdy jest skonfigurowany. Te tokeny zostaną odrzucone przez usługi Firebase w środowisku produkcyjnym lub pakiet Firebase Admin SDK działający w trybie produkcyjnym (np. domyślne zachowanie bez wykonania opisanych powyżej czynności konfiguracyjnych).
Uruchamianie emulatora
Możesz używać emulatora Authentication interaktywnie za pomocą Emulator Suite UI i nieinteraktywnie za pomocą lokalnego interfejsu REST. W kolejnych sekcjach opisujemy przypadki użycia interaktywnego i nieinteraktywnego.
Aby uruchomić emulator Authentication, jego interfejs REST i Emulator Suite UI, wykonaj te czynności:
firebase emulators:start
Emulowane uwierzytelnianie za pomocą adresu e-mail, linku w e-mailu i uwierzytelnianie anonimowe
W przypadku uwierzytelniania anonimowego Twoja aplikacja może korzystać z logiki logowania na Twojej platformie (iOS, Android, przeglądarka).
W przypadku uwierzytelniania za pomocą adresu e-mail i hasła możesz zacząć tworzyć prototypy, dodając konta użytkowników do Authentication emulatora z aplikacji za pomocą metod pakietu SDK Authentication, lub za pomocą Emulator Suite UI.
- W 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ą adresu e-mail.
Po utworzeniu użytkownika testowego Twoja aplikacja może logować i wylogowywać użytkownika za pomocą logiki pakietu SDK na Twojej platformie (iOS, Android, przeglądarka).
Aby przetestować potwierdzanie adresu e-mail lub logowanie za pomocą linku w e-mailu, emulator wyświetla w terminalu adres URL, w którym zostało wykonane 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-keyWklej 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"
}
}
Aby przetestować resetowanie 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_PASSWORDTestowanie nieinteraktywne
Zamiast używać 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 testów, które wywołują interfejsy REST API, aby tworzyć i usuwać konta użytkowników oraz pobierać kody weryfikacyjne wysyłane e-mailem poza pasmem, aby wypełnić adres URL weryfikacji adresu e-mail w emulatorze. Dzięki temu kod platformy i kod testowy są oddzielone, co umożliwia testowanie nieinteraktywne.
W przypadku nieinteraktywnych testów adresu e-mail i hasła typowa sekwencja jest taka:
- Twórz użytkowników za pomocą punktu końcowego REST Authentication Uwierzytelniania.
- Loguj użytkowników za pomocą adresów e-mail i haseł, aby przeprowadzać testy.
- Jeśli jest to wymagane w testach, pobierz dostępne kody do potwierdzania adresu e-mail wysyłane poza pasmem z punktu końcowego REST specyficznego dla emulatora.
- Wyczyść rekordy użytkowników za pomocą punktu końcowego REST specyficznego dla emulatora, aby wyczyścić dane.
Emulowane uwierzytelnianie za pomocą telefonu lub SMS-a
W przypadku uwierzytelniania za pomocą telefonu emulator Uwierzytelniania nie obsługuje:
- procesów reCAPTCHA i APN. Po skonfigurowaniu do współpracy z emulatorem pakiety SDK klienta wyłączają te metody weryfikacji w sposób podobny do opisanego w przypadku testów integracji (iOS, Android, przeglądarka).
- testowych numerów telefonów z kodami wstępnie skonfigurowanymi w Firebase konsoli.
W przeciwnym razie, jeśli chodzi o kod klienta, proces uwierzytelniania za pomocą telefonu lub SMS-a jest identyczny z opisanym w przypadku środowiska produkcyjnego (iOS, Android, przeglądarka).
Korzystanie z Emulator Suite UI:
- W 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 procesów uwierzytelniania za pomocą telefonu emulator NIE będzie jednak wywoływać wysyłania żadnych wiadomości tekstowych, ponieważ kontaktowanie się z operatorem jest poza zakresem i nie jest wygodne w przypadku testów lokalnych. Zamiast tego emulator wyświetla kod, który zostałby wysłany SMS-em, w tym samym terminalu, w którym zostało uruchomione polecenie firebase emulators:start. Wpisz ten kod w aplikacji, aby zasymulować sprawdzanie wiadomości tekstowych przez użytkowników.
Testowanie nieinteraktywne
Aby przeprowadzić nieinteraktywne testy uwierzytelniania za pomocą telefonu, użyj emulatora Authentication interfejsu REST API, aby pobrać dostępne kody SMS. Pamiętaj, że kod jest inny przy każdym rozpoczęciu procesu.
Typowa sekwencja jest taka:
- Wywołaj platformę
signInWithPhoneNumber, aby rozpocząć proces weryfikacji. - Pobierz kod weryfikacyjny za pomocą punktu końcowego REST specyficznego dla emulatora.
- Wywołaj
confirmationResult.confirm(code)jak zwykle z kodem weryfikacyjnym.
Uwierzytelnianie wielopoziomowe za pomocą SMS-a
Emulator Authentication obsługuje tworzenie prototypów i testowanie procesów uwierzytelniania wielopoziomowego (MFA) za pomocą SMS-a, które są dostępne w środowisku produkcyjnym na iOS, Androidzie i w przeglądarce.
Gdy dodasz do emulatora użytkownika testowego, możesz włączyć MFA i skonfigurować co najmniej 1 numer telefonu, na który będą wysyłane wiadomości SMS z 2. poziomem uwierzytelniania. Wiadomości są wyświetlane w tym samym terminalu, w którym zostało uruchomione polecenie firebase emulators:start, i są dostępne w interfejsie REST.
Emulowane uwierzytelnianie za pomocą zewnętrznego dostawcy tożsamości
Emulator Authentication umożliwia testowanie wielu procesów uwierzytelniania za pomocą zewnętrznych dostawców w aplikacjach na iOS, Androida i w przeglądarce bez wprowadzania zmian w kodzie produkcyjnym. Przykłady procesów uwierzytelniania znajdziesz w dokumentacji dotyczącej różnych kombinacji dostawców i platform, których możesz używać w swojej aplikacji.
Ogólnie rzecz biorąc, możesz używać pakietu SDK Firebase do uwierzytelniania na 2 sposoby:
- Twoja aplikacja umożliwia pakietowi SDK obsługę całego procesu od początku do końca, w tym wszystkich interakcji z zewnętrznymi dostawcami tożsamości w celu pobrania danych logowania.
- Twoja aplikacja ręcznie pobiera dane logowania od zewnętrznego dostawcy za pomocą jego pakietu SDK i przekazuje je do pakietu Authentication SDK.
Ponownie sprawdź link do dokumentacji powyżej i upewnij się, że znasz proces, którego chcesz używać – zarządzany przez pakiet SDK Firebase czy ręczne pobieranie danych logowania. Emulator Authentication obsługuje testowanie obu tych metod.
Testowanie procesów dostawcy tożsamości opartych na pakiecie SDK Firebase
Jeśli Twoja aplikacja używa dowolnego procesu od początku do końca pakietu SDK Firebase, np. OAuthProvider do
logowania się za pomocą Microsoftu, GitHub lub Yahoo, do testowania interaktywnego, Authentication
emulator udostępnia lokalną wersję odpowiedniej strony logowania, aby pomóc Ci
w testowaniu uwierzytelniania w aplikacjach internetowych, które wywołują metodę signinWithPopup lub
signInWithRedirect. Ta lokalnie udostępniana strona logowania pojawia się też w aplikacjach mobilnych, renderowana przez bibliotekę WebView Twojej platformy.
W miarę postępu procesów emulator tworzy w razie potrzeby testowe konta użytkowników i dane logowania.
Testowanie procesów dostawcy tożsamości z ręcznym pobieraniem danych logowania
Jeśli używasz „ręcznych” metod logowania i wywołujesz metodę signInWithCredentials swojej platformy, Twoja aplikacja będzie jak zwykle wysyłać prośby o prawdziwe logowanie za pomocą zewnętrznego dostawcy i pobierać prawdziwe dane logowania.
Pamiętaj, że emulator obsługuje uwierzytelnianie signInWithCredential tylko w przypadku danych logowania pobranych z Logowania przez Google, Apple i innych dostawców, którzy używają identyfikatorów tokenów zaimplementowanych jako tokeny internetowe 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 alternatywę w tych przypadkach.
Testowanie nieinteraktywne
Jednym ze sposobów testowania nieinteraktywnego jest zautomatyzowanie kliknięć użytkownika na stronie logowania udostępnianej przez emulator. W przypadku aplikacji internetowych użyj interfejsu sterowania takiego jak WebDriver. W przypadku aplikacji mobilnych użyj narzędzia do testowania interfejsu użytkownika z platformy, np. Espresso lub Xcode.
Możesz też zaktualizować kod, aby używał signInWithCredential (np. w gałęzi kodu), i używać procesu uwierzytelniania za pomocą tokena z testowymi identyfikatorami tokenów zamiast prawdziwych danych logowania.
- Zmień lub zakomentuj część kodu, która pobiera identyfikatory tokenów 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 liczby żądań u dostawcy tożsamości.
- Następnie użyj literału ciągu JSON zamiast tokena w
signInWithCredential. Na przykładzie pakietu SDK do klienta internetowego możesz zmienić kod na:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
W przypadku użycia z emulatorem ten kod pomyślnie uwierzytelni użytkownika z adresem e-mail foo@example.com w Google. Pole sub traktuj jako klucz podstawowy, 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.
new firebase.auth.OAuthProvider('yahoo.com') lub dowolnym innym identyfikatorem dostawcy, który chcesz
zasymulować.
Emulowane uwierzytelnianie za pomocą tokena niestandardowego
Emulator Authentication obsługuje uwierzytelnianie za pomocą niestandardowych tokenów internetowych JSON za pomocą
wywołań metody signInWithCustomToken na obsługiwanych platformach, zgodnie z opisem
w dokumentacji produkcyjnej Authentication.
Różnice między emulatorem Authentication a środowiskiem produkcyjnym
Emulator Authentication Firebase symuluje wiele funkcji usługi w środowisku produkcyjnym. Ponieważ jednak każdy system uwierzytelniania w dużym stopniu opiera się na zabezpieczeniach 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 respektować żadnych zachowań związanych z IAM. Emulatory przestrzegają podanych reguł bezpieczeństwa Firebase, ale w sytuacjach, w których zwykle używany jest IAM, np. do ustawiania konta usługi wywołującej Cloud Functions, a tym samym uprawnień, emulator nie jest konfigurowalny i będzie używać konta dostępnego globalnie na komputerze dewelopera, podobnie jak w przypadku bezpośredniego uruchamiania skryptu lokalnego.
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 inną usługę Uwierzytelnianie Firebase Authentication opiera się na bezpiecznych danych logowania od zewnętrznych dostawców, 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 procesy logowania za pomocą adresu e-mail i SMS-a obejmują operację asynchroniczną, w której użytkownik sprawdza otrzymaną wiadomość i wpisuje kod logowania w interfejsie logowania. Emulator Authentication nie wysyła e-maili ani SMS-ów , ale jak opisano 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ć w konsoli Firebase.
Uwierzytelnianie za pomocą tokena niestandardowego
Emulator Authentication nie sprawdza podpisu ani daty ważności niestandardowych tokenów. Dzięki temu możesz używać ręcznie utworzonych tokenów i ponownie wykorzystywać je w nieskończoność w scenariuszach tworzenia prototypów i testowania.
Ograniczanie liczby żądań i ochrona przed nadużyciami
Emulator Authentication nie replikuje funkcji ograniczania liczby żądań ani ochrony przed nadużyciami w środowisku produkcyjnym.
Funkcje blokowania
W środowisku produkcyjnym użytkownicy są zapisywani w pamięci tylko raz po wywołaniu zdarzeń beforeCreate i beforeSignIn. Ze względu na ograniczenia techniczne,
emulator Authentication zapisuje jednak w pamięci 2 razy – raz po utworzeniu użytkownika i
raz po zalogowaniu. Oznacza to, że w przypadku nowych użytkowników możesz pomyślnie wywołać
getAuth().getUser() w beforeSignIn w emulatorze Authentication, 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.
Ponieważ funkcje wywoływane są typową integracją z Authentication, dowiedz się więcej o emulatorze Cloud Functions dla Firebase w artykule Uruchamianie funkcji lokalnie.