Połącz swoją aplikację z emulatorem uwierzytelniania

Przed użyciem emulatora uwierzytelniania w swojej aplikacji upewnij się, że rozumiesz ogólny przepływ pracy pakietu emulatorów lokalnych Firebase oraz że instalujesz i konfigurujesz pakiet emulatorów lokalnych oraz przeglądasz jego polecenia interfejsu wiersza polecenia .

Co mogę zrobić z emulatorem uwierzytelniania?

Emulator uwierzytelniania zapewnia lokalną emulację usług uwierzytelniania Firebase o wysokiej wierności, udostępniają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 poczty e-mail/hasła, numeru telefonu/SMS-a i logowania się z zewnętrznymi dostawcami tożsamości (takimi jak Google)
  • Przeglądaj i edytuj emulowanych użytkowników
  • Sprawdź komunikaty związane z uwierzytelnianiem na karcie Dzienniki interfejsu użytkownika emulatora.

Wybierz projekt Firebase

Pakiet emulatorów lokalnych Firebase emuluje produkty dla jednego 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ę rzeczywistych 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 bazy danych, zasobniki pamięci, funkcje lub inne zasoby skonfigurowane dla tego projektu Firebase.

Pracując z prawdziwymi projektami Firebase, możesz uruchomić emulatory dla dowolnego lub wszystkich obsługiwanych produktów.

W przypadku jakichkolwiek produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcję z aktywnym zasobem (instancją bazy danych, zasobnikiem pamięci, funkcją itp.).

Próbny

Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów można zwykle uzyskać za pośrednictwem ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów dla projektów demonstracyjnych mają demo- demo.

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod współdziałają 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.

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 rozliczenia
  • Lepsza obsługa offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.

Instrumentacja aplikacji do komunikacji z emulatorem uwierzytelniania

Pakiety SDK na Androida, iOS i internetowe

Skonfiguruj konfigurację w aplikacji lub klasy testowe do interakcji z emulatorem uwierzytelniania w następujący sposób.

Android
FirebaseAuth.getInstance().useEmulator('10.0.2.2', 9099);
Szybki
Auth.auth().useEmulator(withHost:"localhost", port:9099)

Wersja internetowa 9

import { getAuth, connectAuthEmulator } from "firebase/auth";

const auth = getAuth();
connectAuthEmulator(auth, "http://localhost:9099");

Wersja internetowa 8

const auth = firebase.auth();
auth.useEmulator("http://localhost:9099");

Do prototypowania i testowania interakcji między uwierzytelnianiem a funkcjami Cloud Functions lub regułami zabezpieczeń Firebase dla Cloud Firestore lub bazy danych czasu rzeczywistego nie jest wymagana żadna dodatkowa konfiguracja. Gdy emulator uwierzytelniania jest skonfigurowany i inne emulatory są uruchomione, automatycznie współpracują ze sobą.

Admin SDK

Pakiet Firebase Admin SDK automatycznie łączy 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 a emulatorami uwierzytelniania. Zmienna środowiskowa zostanie automatycznie ustawiona dla pakietu Admin SDK w Cloud Functions.

Po ustawieniu zmiennej środowiskowej pakiety Firebase Admin SDK będą akceptować niepodpisane tokeny identyfikacyjne i pliki cookie sesji wydawane przez emulator uwierzytelniania (odpowiednio za pomocą metod verifyIdToken i createSessionCookie ), aby ułatwić lokalne tworzenie i testowanie. Upewnij się, że nie ustawiasz zmiennej środowiskowej w środowisku produkcyjnym.

Łącząc się z emulatorem uwierzytelniania, musisz określić identyfikator projektu. Możesz przekazać identyfikator projektu, aby bezpośrednio initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT . Pamiętaj, że nie musisz używać swojego prawdziwego identyfikatora projektu Firebase; emulator uwierzytelniania zaakceptuje dowolny identyfikator projektu.

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 ID, które są akceptowane tylko przez inne emulatory Firebase lub pakiet Firebase Admin SDK po skonfigurowaniu . Te tokeny zostaną odrzucone przez produkcyjne usługi Firebase lub Firebase Admin SDK działające w trybie produkcyjnym (np. zachowanie domyślne bez opisanych powyżej czynności konfiguracyjnych).

Aby rozpocząć interaktywne prototypowanie za pomocą emulatora uwierzytelniania i interfejsu użytkownika pakietu emulatorów, uruchom pakiet lokalnych emulatorów Firebase.

firebase emulators:start

W przypadku uwierzytelniania anonimowego aplikacja może wykonywać logikę logowania dla Twojej platformy ( iOS , Android , web ).

W przypadku uwierzytelniania poczty e-mail/hasła można rozpocząć tworzenie prototypów, dodając konta użytkowników do emulatora uwierzytelniania z aplikacji przy użyciu metod zestawu SDK uwierzytelniania lub przy użyciu interfejsu użytkownika pakietu emulatorów.

  1. W interfejsie użytkownika pakietu emulatorów kliknij kartę Uwierzytelnianie .
  2. Kliknij przycisk Dodaj użytkownika .
  3. 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 SDK dla Twojej platformy ( iOS , Android , web ).

W celu przetestowania weryfikacji/logowania się za pomocą poczty e-mail za pomocą przepływów łączy 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 wypisuje na terminalu podobny adres URL, w tym parametr newPassword (który można zmienić w razie potrzeby).

http://localhost:9099/emulator/action?mode=resetPassword&oobCode=XYZ!23&apiKey=fake-api-key&newPassword=YOUR_NEW_PASSWORD

Testowanie nieinteraktywne

Zamiast używać interfejsu użytkownika pakietu Emulator lub kodu klienta do zarządzania kontami użytkowników poczty e-mail/hasła, możesz napisać skrypty konfiguracji testowej, które wywołują interfejsy API REST w celu tworzenia i usuwania kont użytkowników oraz pobierania kodów weryfikacji poczty e-mail poza pasmem w celu wypełnienia weryfikacji e-mail emulatora URL. Dzięki temu platforma i kod testowy są oddzielone i umożliwiają testowanie nieinteraktywne.

W przypadku nieinteraktywnych przepływów testowych wiadomości e-mail i haseł typowa sekwencja jest następująca.

  1. Utwórz użytkowników z punktem końcowym REST rejestracji uwierzytelniania .
  2. Zaloguj się użytkowników przy użyciu adresów e-mail i haseł, aby przeprowadzić testy.
  3. Jeśli ma to zastosowanie do Twoich testów, pobierz dostępne kody weryfikacji poczty e-mail poza pasmem z endpontu REST specyficznego dla emulatora .
  4. Opróżnij rekordy użytkowników za pomocą punktu końcowego REST specyficznego dla emulatora w celu wyczyszczenia danych.

Emulowane uwierzytelnianie telefonu/SMS

W przypadku uwierzytelniania telefonu emulator Auth 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, pod względem kodu klienta, przepływ uwierzytelniania telefonu/SMS jest identyczny z opisanym dla produkcji ( iOS , Android , web ).

Korzystanie z interfejsu użytkownika pakietu emulatorów:

  1. W interfejsie użytkownika pakietu emulatorów kliknij kartę Uwierzytelnianie .
  2. Kliknij przycisk Dodaj użytkownika .
  3. Postępuj zgodnie z instrukcjami kreatora tworzenia konta użytkownika, wypełniając pola uwierzytelniania telefonu.

Jednak w przypadku przepływów uwierzytelniania telefonu emulator NIE wyzwoli dostarczania żadnych wiadomości tekstowych, ponieważ kontakt z operatorem jest poza zakresem i nie jest przyjazny dla lokalnych testów! Zamiast tego emulator wypisuje kod, który zostałby wysłany SMS-em do tego samego terminala, na którym uruchomiono firebase emulators:start ; wprowadź ten kod do aplikacji, aby zasymulować użytkowników sprawdzających swoje wiadomości tekstowe.

Testowanie nieinteraktywne

W przypadku nieinteraktywnych testów uwierzytelniania telefonu użyj interfejsu API REST emulatora uwierzytelniania, aby pobrać dostępne kody SMS. Zauważ, że kod jest inny za każdym razem, gdy inicjujesz przepływ.

Typowa sekwencja jest następująca.

  1. Zadzwoń do platformy signInWithPhoneNumber , aby rozpocząć proces weryfikacji.
  2. Pobierz kod weryfikacyjny przy użyciu punktu końcowego REST specyficznego dla emulatora .
  3. Zadzwoń confirmationResult.confirm(code) jak zwykle za pomocą kodu weryfikacyjnego.

Uwierzytelnianie emulowanego zewnętrznego dostawcy tożsamości (IDP)

Emulator uwierzytelniania umożliwia testowanie wielu przepływów uwierzytelniania innych firm w aplikacjach iOS, Android lub sieci Web bez 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, możesz użyć pakietu Firebase SDK do uwierzytelniania na dwa sposoby:

  • Twoja aplikacja umożliwia SDK kompleksową obsługę całego procesu, w tym wszystkich interakcji z zewnętrznymi dostawcami IDP w celu pobrania poświadczeń.
  • Twoja aplikacja ręcznie pobiera poświadczenia od zewnętrznego dostawcy przy użyciu pakietu SDK tej firmy i przekazuje je do zestawu SDK uwierzytelniania.

Ponownie sprawdź powyższy link do dokumentacji i upewnij się, że znasz ten proces — zarządzanie pakietem Firebase SDK, a ręczne pobieranie danych uwierzytelniających — którego chcesz użyć. Emulator uwierzytelniania obsługuje testowanie obu podejść.

Testowanie przepływów IDP opartych na pakiecie Firebase SDK

Jeśli Twoja aplikacja korzysta z dowolnego kompleksowego przepływu pakietu SDK Firebase, takiego jak OAuthProvider do logowania się za pomocą Microsoft, GitHub lub Yahoo, do testów interaktywnych, emulator uwierzytelniania udostępnia lokalną wersję odpowiedniej strony logowania, która ułatwia testowanie 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ę widoku internetowego Twojej platformy.

Emulator tworzy pozorowane konta użytkowników innych firm i poświadczenia zgodnie z potrzebami w miarę postępu przepływów.

Testowanie przepływów IDP z ręcznym pobieraniem poświadczeń

Jeśli używasz technik logowania „ręcznego” i wywołasz metodę signInWithCredentials platformy, jak zwykle aplikacja zażąda prawdziwego logowania innej firmy i pobierze prawdziwe poświadczenia innych firm.

Należy pamiętać, że emulator obsługuje uwierzytelnianie signInWithCredential tylko dla poświadczeń pobranych z Google Sign-In, Apple i innych dostawców, którzy używają tokenów identyfikatorów zaimplementowanych jako tokeny internetowe JSON (JWT). Tokeny dostępu (np. te dostarczane przez Facebook lub Twitter, które nie są tokenami JWT) nie są obsługiwane. W następnej sekcji omówiono alternatywę w takich przypadkach.

Testowanie nieinteraktywne

Jednym z podejść do testowania nieinteraktywnego jest automatyzacja kliknięć użytkownika na stronie logowania obsługiwanej przez emulator. W przypadku aplikacji internetowych użyj interfejsu sterującego, 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 ID dla kont zamiast prawdziwych poświadczeń.

  1. Przeprogramuj lub skomentuj część kodu, która pobiera idTokens z dostawcy tożsamości; eliminuje to potrzebę wprowadzania prawdziwych nazw użytkownika i haseł podczas testów oraz zwalnia testy z przydziałów API i limitów szybkości w IDP.
  2. Po drugie, użyj literału ciągu JSON zamiast tokenu dla signInWithCredential . Korzystając z internetowego pakietu 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 uwierzytelnia użytkownika z adresem 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, naśladując podpisywanie różnych użytkowników. Firebase.auth.GoogleAuthProvider możesz zastąpić na przykład nowym firebase.auth.GoogleAuthProvider new firebase.auth.OAuthProvider('yahoo.com') lub dowolnym innym identyfikatorem dostawcy, którego chcesz zakpić.

Czym różni się emulator uwierzytelniania od produkcji

Emulator uwierzytelniania Firebase symuluje wiele funkcji produktu produkcyjnego. Jednak ponieważ każdy rodzaj systemu 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 przepływy.

Cloud IAM

Pakiet emulatorów Firebase nie próbuje replikować ani respektować żadnego zachowania związanego z uprawnieniami podczas uruchamiania. Emulatory są zgodne z dostarczonymi regułami bezpieczeństwa Firebase, ale w sytuacjach, w których uprawnienia byłyby normalnie używane, na przykład do ustawienia konta usługi wywoływania Cloud Functions, a tym samym uprawnień, emulator nie jest konfigurowalny i będzie korzystał z globalnie dostępnego konta na komputerze dewelopera, podobne do bezpośredniego uruchamiania lokalnego skryptu.

Ponieważ na platformach mobilnych logowanie za pomocą linków e-mail opiera się na linkach dynamicznych Firebase, wszystkie takie linki będą otwierane na (mobilnej) platformie internetowej.

Logowanie innej firmy

W przypadku przepływów logowania innych firm uwierzytelnianie Firebase opiera się na bezpiecznych poświadczeniach od dostawców zewnętrznych, takich jak Twitter i Github.

Prawdziwe dane uwierzytelniające 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 wiadomości e-mail i SMS obejmują operację asynchroniczną, w której użytkownik sprawdza otrzymaną wiadomość i wprowadza kod logowania do interfejsu logowania. Emulator uwierzytelniania nie wysyła żadnych e-maili ani wiadomości SMS, ale jak opisano powyżej , 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, jak można to zrobić za pomocą konsoli Firebase.

Ograniczanie szybkości / przeciwdziałanie nadużyciom

Emulator uwierzytelniania nie replikuje funkcji ograniczania szybkości produkcji ani funkcji przeciwdziałania nadużyciom.

Co następne?

  • Aby zapoznać się z wyselekcjonowanym zestawem filmów i szczegółowymi przykładami instrukcji, skorzystaj z playlisty szkoleniowej na temat emulatorów Firebase .

  • Ponieważ funkcje wyzwalane są typową integracją z uwierzytelnianiem, dowiedz się więcej o emulatorze Cloud Functions dla Firebase w sekcji Uruchom funkcje lokalnie .