Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Połącz swoją aplikację z emulatorem uwierzytelniania

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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 zapoznaj się z jego poleceniami interfejsu wiersza polecenia .

W tym temacie założono, że znasz już tworzenie rozwiązań uwierzytelniania Firebase do zastosowań produkcyjnych. W razie potrzeby przejrzyj dokumentację dotyczącą kombinacji platformy i techniki uwierzytelniania .

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 produkcyjnej wersji uwierzytelniania 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, wieloskładnikowego SMS-a i uwierzytelniania zewnętrznego dostawcy tożsamości (np. Google)
  • Przeglądaj i edytuj emulowanych użytkowników
  • Prototypowe systemy uwierzytelniania tokenów niestandardowych
  • 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, aby rozmawiać z emulatorem

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)

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 tworzenia prototypów 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ą.

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 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.

Jeśli chcesz, aby kod pakietu 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ą interfejsu wiersza polecenia Firebase . Możesz przekazać identyfikator projektu, aby bezpośrednio initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT .

Pakiet Administracyjny 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).

Uruchom emulator

Emulatora uwierzytelniania można używać interaktywnie za pośrednictwem interfejsu użytkownika pakietu emulatorów i nieinteraktywnie za pośrednictwem lokalnego interfejsu REST. Poniższe sekcje obejmują interaktywne i nieinteraktywne przypadki użycia.

Aby uruchomić emulator uwierzytelniania, jego interfejs REST i interfejs użytkownika pakietu emulatorów, wykonaj:

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ę do wiadomości 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 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

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ą odseparowane i można testować w sposób nieinteraktywny.

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żytkownika 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.

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 sieci Web .

Po dodaniu fałszywego użytkownika do emulatora możesz 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 czynnika. Komunikaty są wysyłane do tego samego terminala, na którym uruchomiono firebase emulators:start , i są dostępne z interfejsu REST.

Uwierzytelnianie emulowanego dostawcy tożsamości innej firmy (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 pakietowi 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 tylko uwierzytelnianie signInWithCredential dla poświadczeń pobranych z Google Sign-In, Apple i innych dostawców, którzy używają tokenów identyfikatorów zaimplementowanych jako tokeny sieci Web 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 tokenu z fałszywymi tokenami ID dla kont zamiast prawdziwych poświadczeń.

  1. Przekieruj lub skomentuj część kodu, która pobiera idTokens z IDP; eliminuje to potrzebę wprowadzania prawdziwych nazw użytkownika i haseł podczas testów i zwalnia testy z przydziałów API i limitów szybkości na 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ć.

Uwierzytelnianie za pomocą emulowanego niestandardowego tokena

Emulator uwierzytelniania obsługuje uwierzytelnianie za pomocą niestandardowych tokenów sieci Web 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 produkcji

Emulator uwierzytelniania Firebase symuluje wiele funkcji produktu produkcyjnego. Ponieważ jednak 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 ustawiania 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 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 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.

Niestandardowe uwierzytelnianie tokenem

Emulator uwierzytelniania nie weryfikuje podpisu ani wygaśnięcia tokenów niestandardowych. Pozwala to na używanie ręcznie wykonanych tokenów i ponowne używanie tokenów w nieskończoność w scenariuszach prototypowania i testowania.

Ograniczanie szybkości / przeciwdziałanie nadużyciom

Emulator uwierzytelniania nie replikuje funkcji ograniczania szybkości produkcji ani funkcji zapobiegania 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ż wyzwalane funkcje są typową integracją z uwierzytelnianiem, dowiedz się więcej o emulatorze Cloud Functions dla Firebase w sekcji Uruchom funkcje lokalnie .