Zanim użyjesz emulatora Authentication w swojej aplikacji, zapoznaj się z całym procesem Firebase Local Emulator Suite oraz zainstaluj i skonfiguruj Local Emulator Suite i sprawdź jego polecenia wiersza poleceń.
W tym temacie zakładamy, że wiesz już, jak tworzyć Firebase Authenticationrozwiązania na potrzeby produkcji. W razie potrzeby zapoznaj się z dokumentacją dotyczącą połączenia platformy i techniki uwierzytelniania.
Co mogę zrobić za pomocą emulatora Authentication?
Emulator Authentication zapewnia lokalną emulację usług Firebase Authentication o wysokiej jakości, oferując wiele funkcji dostępnych w produkcyjnej wersji Firebase Authentication. W połączeniu z platformami Apple, pakietami SDK Firebase na Androida i do klienta internetowego emulator umożliwia:
- Tworzenie i aktualizowanie emulowanych kont użytkowników oraz zarządzanie nimi na potrzeby testowania uwierzytelniania poczty e-mail i hasła, numeru telefonu i SMS-ów, wielopoziomowego uwierzytelniania SMS-ów oraz uwierzytelniania za pomocą narzędzi innych firm (np. Google)
- Wyświetlanie i edytowanie emulowanych użytkowników
- Prototypowe systemy uwierzytelniania tokenami niestandardowymi
- Sprawdź komunikaty związane z uwierzytelnianiem na karcie Logi interfejsu emulatora.
Wybieranie projektu Firebase
Firebase Local Emulator Suite emuluje usługi w pojedynczym projekcie Firebase.
Aby wybrać projekt, który ma być używany, przed uruchomieniem emulatorów uruchom 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 oraz projektów demonstracyjnych.
Typ projektu | Funkcje | Używanie z emulatorami |
---|---|---|
Prawdziwe |
Prawdziwy projekt Firebase to projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej za pomocą konsoli Firebase). Prawdziwe projekty mają aktywne zasoby, takie jak instancje bazy danych, kontenery magazynu, funkcje lub inne zasoby skonfigurowane w danym projekcie Firebase. |
Podczas pracy z prawdziwymi projektami Firebase możesz uruchomić emulatory dowolnej lub wszystkich obsługiwanych usług. W przypadku usług, których nie emulujesz, aplikacje i kod będą współdziałać z aktywnym zasobem (instancją bazy danych, zasobnikiem na dane, funkcją itp.). |
Wersja demonstracyjna |
Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase i żadnych zasobów w produkcji. Dostęp do tych projektów uzyskuje się zwykle w ramach ćwiczeń z programowania lub innych samouczków. Identyfikatory projektów demonstracyjnych mają prefiks |
Jeśli pracujesz w projektach demonstracyjnych Firebase, Twoje aplikacje i kod wchodzą w interakcję tylko z emulatorami. Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego emulator nie jest uruchomiony, ten kod zakończy się niepowodzeniem. |
Zalecamy, aby w miarę możliwości korzystać 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 konieczności tworzenia projektu Firebase.
- Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane (produkcyjne) zasoby, nie ma możliwości zmiany danych, ich użycia ani rozliczenia.
- Lepsza obsługa offline – nie musisz łączyć się z internetem, aby pobrać konfigurację pakietu SDK.
Przetestuj aplikację w interakcji z emulatorem
Pakiety SDK na Androida, iOS i aplikacje internetowe
Aby skonfigurować konfigurację w aplikacji lub przetestować klasy, które mają wchodzić w interakcję z emulatorem Authentication, wykonaj te czynności:
Kotlin+KTX
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 nic 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 skonfigurujesz emulator Authentication i uruchomisz inne emulatory, będą one automatycznie ze sobą współpracować.
Admin SDK s
Po ustawieniu zmiennej środowiskowej FIREBASE_AUTH_EMULATOR_HOST
Firebase Admin SDK automatycznie łączą się z emulatorem Authentication.
export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
Pamiętaj, że emulator Cloud Functions automatycznie rozpoznaje 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.
Gdy zmienna środowiskowa jest ustawiona, Firebase Admin SDK będzie akceptować niepodpisane tokeny identyfikatorów i pliki cookie sesji wydawane przez emulator Authentication (odpowiednio za pomocą metod verifyIdToken
i createSessionCookie
), aby ułatwić lokalny rozwój i testowanie. Pamiętaj, aby nie ustawiać zmiennej środowiskowej w produkcji.
Jeśli chcesz, by kod Admin SDK łączył się ze współdzielonym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiasz za pomocą interfejsu wiersza poleceń Firebase. Identyfikator projektu możesz przekazać do funkcji 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"
Identyfikatory tokenów
Ze względów bezpieczeństwa emulator Authentication wydaje niepodpisane tokeny identyfikacyjne, które są akceptowane tylko przez inne emulatory Firebase lub pakiet SDK Firebase Admin, jeśli został skonfigurowany. Te tokeny zostaną odrzucone przez produkcyjne usługi Firebase lub pakiet Firebase Admin SDK działający w produkcyjnym trybie pracy (np. domyślne działanie bez opisanych powyżej kroków konfiguracji).
Uruchom emulator
Emulatora Authentication możesz używać interaktywnie za pomocą interfejsu Emulator Suite UI, a w sposób nieinteraktywny – przez lokalny interfejs REST. W następnych sekcjach omawiamy przypadki użycia interaktywnych i nieinteraktywnych.
Aby uruchomić emulator Authentication, jego interfejs REST i Emulator Suite UI, wykonaj:
firebase emulators:start
Emulacja poczty e-mail, link do e-maila i anonimowe uwierzytelnianie
W przypadku uwierzytelniania anonimowego aplikacja może używać funkcji logowania się dla Twojej platformy (iOS, Android, sieć).
W przypadku uwierzytelniania za pomocą adresu e-mail i hasła możesz zacząć tworzyć prototypy, dodając do emulatora Authentication konta użytkowników w aplikacji za pomocą metod pakietu SDK Authentication lub używając pakietu Emulator Suite UI.
- W Emulator Suite UI kliknij kartę Authentication (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 Twoja aplikacja może logować i wylogowywać użytkownika za pomocą logiki pakietu SDK na danej platformie (iOS, Android, web).
Aby przetestować weryfikację adresu e-mail lub logowanie się za pomocą linków w e-mailu, emulator wyświetla adres URL w terminalu, na którym został wykonany 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 w przeglądarce, aby symulować zdarzenie weryfikacji, i sprawdź, czy weryfikacja się udała.
{
"authEmulator": {
"success": "The email has been successfully verified.",
"email": "customer@example.com"
}
}
Aby przetestować resetowanie hasła, emulator wyświetla w terminalu podobny URL, w tym parametr newPassword (w razie potrzeby możesz go zmienić).
http://127.0.0.1:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
Testy nieinteraktywne
Zamiast używać interfejsu Emulator Suite UI lub kodu klienta do zarządzania kontami użytkowników (e-mail i hasło), możesz napisać skrypty testowe, które wywołują interfejsy API REST w celu tworzenia i usuwania kont użytkowników oraz pobierania dodatkowych kodów weryfikacyjnych e-maila w celu wypełnienia adresu URL weryfikacji e-maila w emulatorze. Dzięki temu kod platformy i testowy są rozdzielone, a Ty możesz przeprowadzać testy bez interakcji.
W przypadku nieinteraktywnych procedur testowania poczty e-mail i haseł sekwencja wygląda następująco.
- Utwórz użytkowników za pomocą Authentication punktu końcowego REST signUp.
- Zaloguj użytkowników, używając ich adresów e-mail i haseł, aby przeprowadzić testy.
- W razie potrzeby pobierz dostępne zweryfikowane e-mailem kody z punktu końcowego REST dla konkretnego emulatora.
- Wyczyść rekordy użytkowników za pomocą punktu końcowego REST dla danego emulatora, aby usunąć dane.
Emulowane uwierzytelnianie przez telefon/SMS-y
W przypadku uwierzytelniania przez telefon emulator uwierzytelniania nie obsługuje:
- procesy 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, web).
- Testowanie numerów telefonów z kodami skonfigurowanymi w konsoli Firebase.
W pozostałych aspektach kod klienta w przypadku uwierzytelniania przez telefon lub SMS jest identyczny jak w wersji produkcyjnej (iOS, Android, internet).
Korzystanie z usługi Emulator Suite UI:
- Na stronie 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 przez telefon.
Jednak w przypadku procesów uwierzytelniania przez telefon emulator NIE uruchamia wysyłania żadnych SMS-ów, ponieważ kontaktowanie się z operatorem wykracza poza zakres testów lokalnych i nie jest przyjazne dla użytkownika. Zamiast tego emulator wyświetla kod wysłany SMS-em na tym samym terminalu, na którym został uruchomiony firebase emulators:start
. Wpisz go w aplikacji, aby symulować użytkownika sprawdzającego SMS-y.
Testy nieinteraktywne
Aby przetestować uwierzytelnianie przez telefon bez interakcji, użyj emulatora Authentication interfejsu REST API, aby pobrać dostępne kody SMS. Pamiętaj, że kod jest inny za każdym razem, gdy inicjujesz proces.
Zazwyczaj wygląda to tak.
- Aby rozpocząć proces weryfikacji, zadzwoń na platformę
signInWithPhoneNumber
. - Pobierz kod weryfikacyjny za pomocą odpowiedniego punktu końcowego REST emulatora.
- Zadzwoń pod numer
confirmationResult.confirm(code)
jak zwykle i podaj kod weryfikacyjny.
Uwierzytelnianie wielopoziomowe przy użyciu SMS-ów
Emulator Authentication umożliwia prototypowanie i testowanie wieloetapowych procesów uwierzytelniania SMS-em dostępnych w produkcji na iOS, Androidzie i w internecie.
Po dodaniu do emulatora przykładowego użytkownika możesz włączyć MFA i skonfigurować co najmniej 1 numer telefonu, na który będą wysyłane SMS-y drugiego składnika. Komunikaty
wyświetlane są na tym samym terminalu, na którym uruchomiono firebase emulators:start
,
i są dostępne w interfejsie REST.
Emulowane uwierzytelnianie przez zewnętrznego dostawcę tożsamości
Emulator Authentication umożliwia testowanie wielu przepływów uwierzytelniania innych firm w aplikacjach na iOS, Androida lub w witrynach bez wprowadzania zmian w kodzie produkcyjnym. Przykłady przepływó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 uwierzytelniać użytkowników za pomocą pakietu SDK Firebase na 1 z 2 sposobów:
- Aplikacja pozwala pakietowi SDK obsługiwać cały proces od początku do końca, w tym wszystkie interakcje z zewnętrzymi dostawcami usług tożsamości, które są niezbędne do 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 kliknij link do dokumentacji powyżej i upewnij się, że znasz proces, którego chcesz użyć: zarządzanie przez pakiet SDK Firebase lub ręczne pobieranie danych logowania. Emulator Authentication obsługuje testowanie w obu przypadkach.
Testowanie procesów IDP obsługiwanych przez pakiet Firebase SDK
Jeśli Twoja aplikacja korzysta z dowolnego kompleksowego procesu z pakietu SDK Firebase, np. OAuthProvider
do logowania się przez Microsoft, GitHub lub Yahoo, do testów interaktywnych, emulator Authentication udostępnia lokalną wersję odpowiedniej strony logowania, aby ułatwić Ci przetestowanie uwierzytelniania aplikacji internetowych, które wywołują metodę signinWithPopup
lub signInWithRedirect
. Ta lokalnie wyświetlana strona logowania pojawia się też w aplikacjach mobilnych renderowanych przez bibliotekę przeglądarki internetowej Twojej platformy.
W miarę postępu procesów emulator tworzy symulowane konta użytkowników i dane logowania.
Testowanie przepływów dostawcy tożsamości z ręcznym pobieraniem danych logowania
Jeśli używasz „ręcznych” metod logowania i wywołujesz metodę signInWithCredentials
platformy, aplikacja będzie jak zwykle prosić o logowanie się w usłudze innej firmy i pobierać jej dane logowania.
Pamiętaj, że emulator obsługuje tylko uwierzytelnianie signInWithCredential
za pomocą danych logowania pobranych z funkcji logowania Google, Apple i innych dostawców, którzy używają tokenów identyfikacyjnych 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 alternatywne rozwiązanie w takich przypadkach.
Testy nieinteraktywne
Jednym z podejść do testowania nieinterakcyjnego jest zautomatyzowanie 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ędzia do testowania interfejsu użytkownika na swojej platformie, np. Espresso lub Xcode.
Możesz też zaktualizować kod, aby używać signInWithCredential
(np. w gałęzi kodu), i używać przepływu uwierzytelniania za pomocą tokenów z udawanymi tokenami identyfikatorów kont zamiast prawdziwych danych logowania.
- Zmień lub skomentuj część kodu, która pobiera tokeny identyfikacyjne z dostawcy tożsamości. Dzięki temu nie będziesz musiał(-a) podawać prawdziwych nazw użytkowników i haseł podczas testów, a testy nie będą obciążać limitów interfejsu API i limitów szybkości dostawcy tożsamości.
- Po drugie, zamiast tokena
signInWithCredential
użyj dosłownego ciągu znaków JSON. Na przykład w pakiecie SDK do przeglądarek możesz zmienić kod, aby:
firebase.auth().signInWithCredential(firebase.auth.GoogleAuthProvider.credential(
'{"sub": "abc123", "email": "foo@example.com", "email_verified": true}'
));
Gdy jest używany z emulatorem, ten kod umożliwia uwierzytelnienie użytkownika z adresem e-mail foo@example.com
w Google. Uważaj to pole podrzędne za klucz główny, który można zmienić na dowolny ciąg znaków, symulując podpisywanie przez różnych użytkowników. Możesz zastąpić firebase.auth.GoogleAuthProvider
na przykład wartością new firebase.auth.OAuthProvider('yahoo.com')
lub dowolnym innym identyfikatorem dostawcy, który chcesz zasymulować.
Emulowane uwierzytelnianie za pomocą tokenu niestandardowego
Emulator Authentication obsługuje uwierzytelnianie za pomocą niestandardowych tokenów internetowych JSON, korzystając z metody signInWithCustomToken
na obsługiwanych platformach zgodnie z opisem w dokumentacji Authentication na potrzeby produkcji.
Czym różni się emulator Authentication od wersji produkcyjnej
Emulator Authentication Firebase symuluje wiele funkcji produkcyjnej wersji usługi. Każdy system uwierzytelniania wymaga jednak bezpieczeństwa na wielu poziomach (urządzenia, dostawcy zewnętrznych, Firebase itp.), dlatego emulatorowi trudno jest odpowiednio odtworzyć wszystkie przepływy.
Cloud IAM
Pakiet emulatorów Firebase nie próbuje odwzorowywać ani uwzględniać podczas działania żadnych zachowań związanych z IAM. Emulatory przestrzegają reguł zabezpieczeń Firebase, ale w sytuacjach, w których zwykle używane jest IAM, np. do konfigurowania wywołań konta usługi Cloud Functions i odpowiednich uprawnień, emulator nie jest konfigurowalny i używa konta dostępnego globalnie na Twoim urządzeniu dewelopera, podobnie jak w przypadku bezpośredniego uruchamiania skryptu lokalnego.
Logowanie się za pomocą linku w e-mailu na urządzeniu mobilnym
Na platformach mobilnych logowanie się za pomocą linku e-mailowego wymaga korzystania z Linków dynamicznych Firebase, dlatego wszystkie takie linki będą otwierane na platformie internetowej (mobilnej).
Logowanie przez inną usługę
W przypadku procesów logowania z usług zewnętrznych Firebase Authentication korzysta z bezpiecznych danych logowania od dostawców zewnętrznych, takich jak Twitter czy GitHub.
Emuulator Authentication akceptuje prawdziwe dane logowania od dostawców OpenID Connect, takich jak Google czy Apple. Dane logowania od dostawców innych niż OpenID Connect nie są obsługiwane.
Logowanie przez e-maila lub SMS-a
W aplikacjach produkcyjnych przepływy logowania przez e-maila 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 żadnych e-maili ani SMS-ów, ale jak opisano powyżej, generuje kody logowania i zwraca je do terminala do użycia podczas testów.
Emulator nie obsługuje możliwości definiowania testowych numerów telefonów za pomocą stałych kodów logowania, jak to można zrobić na konsoli Firebase.
Uwierzytelnianie za pomocą niestandardowego tokena
Emulator Authentication nie weryfikuje podpisu ani daty wygaśnięcia tokenów niestandardowych. Dzięki temu możesz używać ręcznie tworzonych tokenów i ich wielokrotnego wykorzystywania w scenariuszach prototypowania i testowania.
Ograniczanie liczby żądań / zapobieganie nadużyciom
Emulator Authentication nie odwzorowuje funkcji ograniczania szybkości ani funkcji zapobiegania nadużyciom w wersji produkcyjnej.
Funkcje blokowania
W środowisku produkcyjnym użytkownicy są zapisywany w pamięci raz po wywołaniu zdarzeń beforeCreate
i beforeSignIn
. Jednak ze względu na ograniczenia techniczne emulator Authentication zapisuje dane w magazynie 2 razy – raz po utworzeniu użytkownika i drugi po zalogowaniu. Oznacza to, że w przypadku nowych użytkowników możesz wywołać funkcję getAuth().getUser()
w beforeSignIn
w emulatorze Authentication, ale w produkcji napotkasz błąd.
Co dalej?
Wyselekcjonowany zestaw filmów i szczegółowe przykłady instrukcji znajdziesz na playliście szkoleniowej dotyczącej emulatorów Firebase.
Funkcja wywoływana jest typową integracją z Authentication. Dowiedz się więcej o emulatorze Cloud Functions for Firebase w artykule Wykonywanie funkcji lokalnie.