Zanim użyjesz emulatora uwierzytelniania w swojej aplikacji, upewnij się, że rozumiesz ogólny przepływ pracy w pakiecie lokalnych emulatorów Firebase oraz że instalujesz i konfigurujesz pakiet lokalnych emulatorów i przeglądasz jego polecenia interfejsu wiersza polecenia .
W tym temacie przyjęto założenie, że znasz już opracowywanie rozwiązań uwierzytelniania Firebase na potrzeby produkcji. W razie potrzeby przejrzyj dokumentację swojej kombinacji platformy i techniki uwierzytelniania .
Co mogę zrobić z emulatorem uwierzytelniania?
Emulator uwierzytelniania zapewnia lokalną emulację usług uwierzytelniania Firebase o wysokiej wierności, zapewniając wiele funkcji dostępnych w produkcyjnym uwierzytelnianiu Firebase . W połączeniu z platformami Apple, pakietami SDK Android i Web Firebase emulator umożliwia:
- Twórz, aktualizuj i zarządzaj emulowanymi kontami użytkowników w celu testowania adresu e-mail/hasła, numeru telefonu/SMS, wieloskładnikowego SMS-a i uwierzytelniania zewnętrznego dostawcy tożsamości (np. Google)
- Przeglądaj i edytuj emulowanych użytkowników
- Prototypuj niestandardowe systemy uwierzytelniania tokenów
- Sprawdź komunikaty związane z uwierzytelnianiem na karcie Dzienniki interfejsu użytkownika emulatora.
Wybierz projekt Firebase
Firebase Local Emulator Suite emuluje produkty dla pojedynczego projektu Firebase.
Aby wybrać projekt do użycia, przed uruchomieniem emulatorów, w CLI uruchom firebase use
w swoim katalogu roboczym. Lub możesz przekazać flagę --project
do każdego polecenia emulatora.
Local Emulator Suite obsługuje emulację prawdziwych projektów Firebase i projektów demonstracyjnych .
Typ projektu | Cechy | Używaj z emulatorami |
---|---|---|
Prawdziwy | Prawdziwy projekt Firebase to taki, który utworzyłeś i skonfigurowałeś (najprawdopodobniej za pomocą konsoli Firebase). Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, zasobniki pamięci, funkcje lub wszelkie inne zasoby skonfigurowane dla tego projektu Firebase. | Pracując z prawdziwymi projektami Firebase, możesz uruchamiać emulatory dla dowolnego lub wszystkich obsługiwanych produktów. W przypadku produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancja bazy danych, zasobnik pamięci, funkcja itp.). |
Próbny | Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Projekty te są zwykle dostępne za pośrednictwem laboratoriów kodów lub innych samouczków. Identyfikatory projektów dla projektów demonstracyjnych mają przedrostek | Podczas pracy z demonstracyjnymi projektami Firebase aplikacje i kod współdziałają tylko z emulatorami . Jeśli Twoja aplikacja spróbuje wejść w interakcję z zasobem, dla którego nie działa emulator, ten kod zakończy się niepowodzeniem. |
W miarę możliwości zalecamy korzystanie z projektów demonstracyjnych. Korzyści obejmują:
- Łatwiejsza konfiguracja, ponieważ możesz uruchamiać emulatory bez tworzenia projektu Firebase
- Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane (produkcyjne) zasoby, nie ma szans na zmianę danych, wykorzystanie i rozliczenie
- Lepsze wsparcie offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.
Przygotuj swoją aplikację do komunikowania się z emulatorem
Android, iOS i internetowe SDK
Skonfiguruj konfigurację w aplikacji lub klasy testowe do interakcji z emulatorem uwierzytelniania w następujący sposób.
Kotlin+KTX
Firebase.auth.useEmulator("10.0.2.2", 9099)
Java
FirebaseAuth.getInstance().useEmulator("10.0.2.2", 9099);
Szybki
Auth.auth().useEmulator(withHost:"localhost", port:9099)
Web version 9
import { getAuth, connectAuthEmulator } from "firebase/auth"; const auth = getAuth(); connectAuthEmulator(auth, "http://localhost:9099");
Web version 8
const auth = firebase.auth(); auth.useEmulator("http://localhost:9099");
Do prototypowania i testowania interakcji między uwierzytelnianiem a funkcjami chmury lub regułami bezpieczeństwa Firebase dla Cloud Firestore lub bazy danych czasu rzeczywistego nie jest wymagana żadna dodatkowa konfiguracja. Po skonfigurowaniu emulatora uwierzytelniania i uruchomieniu innych emulatorów automatycznie współpracują one ze sobą.
Pakiety SDK administratora
Pakiety SDK Firebase Admin automatycznie łączą się z emulatorem uwierzytelniania, gdy ustawiona jest zmienna środowiskowa FIREBASE_AUTH_EMULATOR_HOST
.
export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"
Pamiętaj, że emulator Cloud Functions automatycznie rozpoznaje emulator uwierzytelniania, więc możesz pominąć ten krok podczas testowania integracji między Cloud Functions i emulatorami uwierzytelniania. Zmienna środowiskowa zostanie automatycznie ustawiona dla pakietu Admin SDK w Cloud Functions.
Po ustawieniu zmiennej środowiskowej zestawy SDK Firebase Admin będą akceptować niepodpisane tokeny identyfikacyjne i sesyjne pliki cookie wydawane przez emulator uwierzytelniania (odpowiednio za pomocą metod verifyIdToken
i createSessionCookie
), aby ułatwić lokalne programowanie i testowanie. Upewnij się , że nie ustawiasz zmiennej środowiskowej w środowisku produkcyjnym.
Jeśli chcesz, aby Twój kod Admin SDK łączył się z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiłeś za pomocą Firebase CLI . Możesz przekazać identyfikator projektu bezpośrednio do initializeApp
lub ustawić zmienną środowiskową GCLOUD_PROJECT
.
Pakiet SDK administratora Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"
Tokeny identyfikacyjne
Ze względów bezpieczeństwa emulator uwierzytelniania wystawia niepodpisane tokeny identyfikacyjne, które są akceptowane tylko przez inne emulatory Firebase lub pakiet Firebase Admin SDK, jeśli jest skonfigurowany . Te tokeny zostaną odrzucone przez produkcyjne usługi Firebase lub Firebase Admin SDK działające w trybie produkcyjnym (np. zachowanie domyślne bez czynności konfiguracyjnych opisanych powyżej).
Uruchom emulator
Z emulatora uwierzytelniania można korzystać interaktywnie za pośrednictwem interfejsu użytkownika pakietu emulatorów i nieinteraktywnie za pośrednictwem lokalnego interfejsu REST. W poniższych sekcjach omówiono interaktywne i nieinteraktywne przypadki użycia.
Aby uruchomić emulator uwierzytelniania, jego interfejs REST i interfejs użytkownika zestawu emulatorów, wykonaj:
firebase emulators:start
Emulowana wiadomość e-mail, łącze e-mail i anonimowe uwierzytelnianie
W przypadku uwierzytelniania anonimowego Twoja aplikacja może korzystać z logiki logowania dla Twojej platformy ( iOS , Android , internet ).
W przypadku uwierzytelniania za pomocą adresu e-mail/hasła możesz rozpocząć prototypowanie, dodając konta użytkowników do emulatora uwierzytelniania ze swojej aplikacji przy użyciu metod zestawu SDK uwierzytelniania lub interfejsu użytkownika pakietu emulatorów.
- W interfejsie użytkownika Emulator Suite kliknij kartę Uwierzytelnianie .
- Kliknij przycisk Dodaj użytkownika .
- Postępuj zgodnie z kreatorem tworzenia konta użytkownika, wypełniając pola uwierzytelniania poczty e-mail.
Po utworzeniu użytkownika testowego Twoja aplikacja może logować użytkownika i wylogowywać go za pomocą logiki zestawu SDK dla Twojej platformy ( iOS , Android , Web ).
W celu przetestowania weryfikacji poczty e-mail/logowania za pomocą przepływów linków e-mail emulator drukuje adres URL do terminala, na którym wykonano firebase emulators:start
.
i To verify the email address customer@ex.com, follow this link:
http://localhost: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"
}
}
W celu przetestowania resetowania hasła emulator drukuje podobny adres URL, w tym parametr newPassword (który można zmienić w razie potrzeby) na terminalu.
http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD
Testy nieinteraktywne
Zamiast korzystać z interfejsu użytkownika Emulator Suite lub kodu klienta do zarządzania kontami e-mail/hasłami użytkowników, można pisać testowe skrypty konfiguracyjne, które wywołują interfejsy API REST w celu tworzenia i usuwania kont użytkowników oraz pobierania kodów weryfikacyjnych poczty e-mail poza pasmem w celu wypełnienia weryfikacji poczty e-mail emulatora Adres URL. Dzięki temu platforma i kod testowy są oddzielone i umożliwiają testowanie w sposób nieinteraktywny.
W przypadku nieinteraktywnych przepływów testowania poczty e-mail i hasła typowa sekwencja jest następująca.
- Utwórz użytkowników z punktem końcowym REST rejestracji uwierzytelniania.
- Zaloguj użytkowników, używając adresów e-mail i haseł, aby przeprowadzić testy.
- Jeśli ma to zastosowanie do twoich testów, pobierz dostępne kody weryfikacyjne poczty e-mail poza pasmem z punktu końcowego REST specyficznego dla emulatora .
- Opróżnij rekordy użytkowników za pomocą punktu końcowego REST specyficznego dla emulatora w celu wyczyszczenia danych.
Emulowane uwierzytelnianie przez telefon/SMS
W przypadku uwierzytelniania telefonu emulator uwierzytelniania nie obsługuje:
- przepływy reCAPTCHA i APN. Po skonfigurowaniu do interakcji z emulatorem zestawy SDK klienta wyłączają te metody weryfikacji w sposób podobny do opisanego w przypadku testowania integracji ( iOS , Android , Web ).
- Testuj numery telefonów za pomocą kodów wstępnie skonfigurowanych w konsoli Firebase.
W przeciwnym razie, jeśli chodzi o kod klienta, przepływ uwierzytelniania przez telefon/SMS jest identyczny z opisanym dla produkcji ( iOS , Android , web ).
Korzystanie z interfejsu użytkownika pakietu emulatorów:
- W interfejsie użytkownika Emulator Suite kliknij kartę Uwierzytelnianie .
- Kliknij przycisk Dodaj użytkownika .
- Postępuj zgodnie z kreatorem tworzenia konta użytkownika, wypełniając pola uwierzytelniania telefonu.
Jednak w przypadku przepływów uwierzytelniania telefonicznego emulator NIE wyzwala dostarczania żadnych wiadomości tekstowych, ponieważ kontakt z operatorem jest poza zakresem i nie jest przyjazny dla lokalnych testów! Zamiast tego emulator drukuje kod, który zostałby wysłany SMS-em do tego samego terminala, na którym uruchomiłeś firebase emulators:start
; wprowadź ten kod do aplikacji, aby symulować użytkowników sprawdzających wiadomości tekstowe.
Testy nieinteraktywne
W przypadku nieinteraktywnych testów uwierzytelniania telefonu użyj interfejsu API REST emulatora uwierzytelniania, aby pobrać dostępne kody SMS. Pamiętaj, że kod jest inny za każdym razem, gdy inicjujesz przepływ.
Typowa kolejność jest następująca.
- Zadzwoń do platformy
signInWithPhoneNumber
, aby rozpocząć proces weryfikacji. - Pobierz kod weryfikacyjny przy użyciu punktu końcowego REST specyficznego dla emulatora .
- Zadzwoń z
confirmationResult.confirm(code)
jak zwykle z kodem weryfikacyjnym.
Wieloskładnikowe SMS-y
Emulator uwierzytelniania obsługuje prototypowanie i testowanie przepływów uwierzytelniania wieloskładnikowego SMS (MFA) dostępnych w środowisku produkcyjnym dla systemów iOS , Android i Web .
Po dodaniu fałszywego użytkownika do emulatora można włączyć usługę MFA i skonfigurować jeden lub więcej numerów telefonów, na które będą wysyłane wiadomości SMS drugiego składnika. Komunikaty są wysyłane do tego samego terminala, na którym uruchomiono firebase emulators:start
i są dostępne z interfejsu REST.
Emulowane uwierzytelnianie zewnętrznego dostawcy tożsamości (IDP).
Emulator uwierzytelniania umożliwia testowanie wielu przepływów uwierzytelniania innych firm w aplikacjach iOS, Android lub internetowych bez zmian w kodzie produkcyjnym. Aby zapoznać się z przykładami przepływów uwierzytelniania, zapoznaj się z dokumentacją różnych kombinacji dostawców i platform, z których możesz korzystać w swojej aplikacji .
Ogólnie rzecz biorąc, możesz użyć Firebase SDK do uwierzytelnienia na jeden z dwóch sposobów:
- Twoja aplikacja pozwala pakietowi SDK obsłużyć cały proces od początku do końca, w tym wszystkie interakcje z zewnętrznymi dostawcami IDP w celu pobrania danych uwierzytelniających.
- Twoja aplikacja ręcznie pobiera dane uwierzytelniające od zewnętrznego dostawcy za pomocą pakietu SDK tego podmiotu i przekazuje te dane uwierzytelniające do pakietu SDK uwierzytelniania.
Jeszcze raz sprawdź powyższy link do dokumentacji i upewnij się, że znasz przepływ – zarządzany przez Firebase SDK czy ręczne pobieranie danych logowania – którego chcesz użyć. Emulator uwierzytelniania obsługuje testowanie obu podejść.
Testowanie przepływów IDP opartych na SDK Firebase
Jeśli Twoja aplikacja korzysta z kompleksowego przepływu Firebase SDK, takiego jak OAuthProvider
do logowania się w Microsoft, GitHub lub Yahoo, do testowania interaktywnego, emulator uwierzytelniania udostępnia lokalną wersję odpowiedniej strony logowania, aby pomóc Ci przetestować uwierzytelnianie z aplikacji internetowych, które wywołują metodę signinWithPopup
lub signInWithRedirect
. Ta lokalnie obsługiwana strona logowania pojawia się również w aplikacjach mobilnych, renderowanych przez bibliotekę WebView Twojej platformy.
Emulator tworzy pozorowane konta użytkowników i poświadczenia innych firm zgodnie z potrzebami w miarę postępu przepływów.
Testowanie przepływów IDP z ręcznym pobieraniem poświadczeń
Jeśli korzystasz z „ręcznych” technik logowania i wywołujesz metodę signInWithCredentials
swojej platformy, to jak zwykle Twoja aplikacja zażąda rzeczywistego logowania innej firmy i pobierze prawdziwe dane uwierzytelniające innej firmy.
Pamiętaj, że emulator obsługuje tylko uwierzytelnianie signInWithCredential
dla poświadczeń pobranych z Google Sign-In, Apple i innych dostawców, którzy używają tokenów identyfikatora zaimplementowanych jako tokeny sieci Web JSON (JWT). Tokeny dostępu (np. udostępniane przez Facebooka lub Twittera, które nie są JWT) nie są obsługiwane. W następnej sekcji omówiono alternatywę w takich przypadkach.
Testy nieinteraktywne
Jednym ze sposobów testowania nieinteraktywnego jest automatyzacja kliknięć użytkownika na stronie logowania obsługiwanej przez emulator. W przypadku aplikacji internetowych użyj interfejsu sterowania, takiego jak WebDriver. W przypadku urządzeń mobilnych użyj narzędzi do testowania interfejsu użytkownika ze swojej platformy, takich jak Espresso lub Xcode.
Alternatywnie możesz zaktualizować swój kod, aby używał signInWithCredential
(np. w gałęzi kodu) i użyć przepływu uwierzytelniania tokena z fałszywymi tokenami identyfikatora dla kont zamiast prawdziwych poświadczeń.
- Zmodyfikuj lub skomentuj część kodu, która pobiera idTokens z IDP; eliminuje to konieczność wprowadzania prawdziwych nazw użytkowników i haseł podczas testów oraz uwalnia testy od limitów API i limitów szybkości na IDP.
- Po drugie, użyj dosłownego ciągu JSON zamiast tokenu dla
signInWithCredential
. Korzystając z internetowego zestawu SDK jako przykładu, 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 za pomocą adresu e-mail foo@example.com
w Google. Pomyśl o polu podrzędnym jako o kluczu podstawowym, który można zmienić na dowolny ciąg, kpiąc z logowania różnych użytkowników. Możesz zastąpić firebase.auth.GoogleAuthProvider
na przykład new firebase.auth.OAuthProvider('yahoo.com')
lub dowolnym innym identyfikatorem dostawcy, z którego chcesz kpić.
Emulowane niestandardowe uwierzytelnianie tokena
Emulator uwierzytelniania obsługuje uwierzytelnianie za pomocą niestandardowych tokenów internetowych JSON przy użyciu wywołań metody signInWithCustomToken
na obsługiwanych platformach, zgodnie z opisem w dokumentacji uwierzytelniania produkcyjnego .
Czym różni się emulator uwierzytelniania od wersji produkcyjnej
Emulator uwierzytelniania Firebase symuluje wiele funkcji produktu produkcyjnego. Ponieważ jednak każdy rodzaj systemu uwierzytelniania w dużej mierze opiera się na bezpieczeństwie na wielu poziomach (urządzenie, zewnętrzni dostawcy, Firebase itp.), emulatorowi trudno jest poprawnie odtworzyć wszystkie przepływy.
Uprawnienia w chmurze
Pakiet Firebase Emulator Suite nie próbuje replikować ani respektować żadnych zachowań związanych z IAM podczas uruchamiania. Emulatory są zgodne z podanymi Regułami bezpieczeństwa Firebase, ale w sytuacjach, w których IAM byłyby normalnie używane, na przykład do ustawiania konta usługi wywołującego Cloud Functions, a tym samym uprawnień, emulatora nie można konfigurować i użyje globalnie dostępnego konta na komputerze programisty, podobne do bezpośredniego uruchamiania lokalnego skryptu.
Zaloguj się za pomocą łącza e-mail na urządzeniu mobilnym
Ponieważ na platformach mobilnych logowanie za pomocą łącza e-mail opiera się na dynamicznych linkach Firebase, wszystkie takie łącza będą otwierane na (mobilnej) platformie internetowej.
Logowanie innej firmy
W przypadku procesów logowania innych firm uwierzytelnianie Firebase opiera się na bezpiecznych danych uwierzytelniających od zewnętrznych dostawców, takich jak Twitter i Github.
Prawdziwe poświadczenia od dostawców OpenID Connect, takich jak Google i Apple, są akceptowane przez emulator uwierzytelniania. Poświadczenia od dostawców innych niż OpenID Connect nie są obsługiwane.
Logowanie przez e-mail / SMS
W aplikacjach produkcyjnych przepływy logowania do poczty e-mail i wiadomości SMS obejmują operację asynchroniczną, w której użytkownik sprawdza otrzymaną wiadomość i wprowadza kod logowania w interfejsie logowania. Emulator uwierzytelniania nie wysyła żadnych wiadomości e-mail ani wiadomości SMS, ale zgodnie z powyższym opisem generuje kody logowania i wysyła je do terminala w celu użycia w testach.
Emulator nie obsługuje możliwości definiowania testowych numerów telefonów ze stałymi kodami logowania, co można zrobić za pomocą konsoli Firebase.
Niestandardowe uwierzytelnianie tokenu
Emulator uwierzytelniania nie weryfikuje podpisu ani wygaśnięcia tokenów niestandardowych. Pozwala to na korzystanie z ręcznie wykonanych tokenów i ich ponowne wykorzystywanie w nieskończoność w scenariuszach prototypowania i testowania.
Ograniczanie stawek / przeciwdziałanie nadużyciom
Emulator uwierzytelniania nie replikuje funkcji ograniczania szybkości produkcji ani funkcji przeciwdziałania nadużyciom.
Funkcje blokujące
W środowisku produkcyjnym użytkownicy są zapisywani do magazynu raz po wyzwoleniu zdarzeń beforeCreate
i beforeSignIn
. Jednak ze względu na ograniczenia techniczne emulator uwierzytelniania zapisuje dane do magazynu dwa razy, raz po utworzeniu użytkownika, a drugi po zalogowaniu. Oznacza to, że w przypadku nowych użytkowników można pomyślnie wywołać getAuth().getUser()
w beforeSignIn
w emulatorze uwierzytelniania, ale wystąpiłby błąd podczas wykonywania tej czynności w środowisku produkcyjnym.
Co następne?
Aby zapoznać się z wyselekcjonowanym zestawem filmów i szczegółowymi przykładami, postępuj zgodnie z listą odtwarzania szkoleniowych emulatorów Firebase .
Ponieważ wyzwalane funkcje są typową integracją z uwierzytelnianiem, dowiedz się więcej o emulatorze Cloud Functions for Firebase na stronie Uruchom funkcje lokalnie .