Użytkownicy w projektach Firebase

Obiekt użytkownika Firebase reprezentuje konto użytkownika, które zarejestrowało się w aplikacji w Twoim projekcie. Aplikacje mają zazwyczaj wielu zarejestrowanych użytkowników, a każda aplikacja w projekcie ma wspólną bazę danych użytkowników.

Instancje użytkowników są niezależne od instancji Firebase Authentication, więc możesz mieć kilka odniesień do różnych użytkowników w tym samym kontekście i nadal wywoływać dowolną z ich metod.

Właściwości użytkownika

Użytkownicy Firebase mają ustalony zestaw podstawowych właściwości – unikalny identyfikator, podstawowy adres e-mail, imię i adres URL zdjęcia – przechowywany w bazie danych użytkowników projektu, który może być aktualizowany przez użytkownika ( iOS , Android , web ). Nie można bezpośrednio dodać innych właściwości do obiektu użytkownika; zamiast tego możesz przechowywać dodatkowe właściwości w dowolnych innych usługach przechowywania, takich jak Google Cloud Firestore.

Gdy użytkownik po raz pierwszy zarejestruje się w Twojej aplikacji, dane profilu użytkownika zostaną uzupełnione przy użyciu dostępnych informacji:

  • Jeśli użytkownik zarejestrował się przy użyciu adresu e-mail i hasła, wypełniana jest tylko właściwość podstawowego adresu e-mail
  • Jeśli użytkownik zarejestrował się u federacyjnego dostawcy tożsamości, takiego jak Google lub Facebook, informacje o koncie udostępnione przez dostawcę zostaną wykorzystane do wypełnienia profilu użytkownika
  • Jeśli użytkownik zarejestrował się w Twoim niestandardowym systemie uwierzytelniania, musisz jawnie dodać żądane informacje do profilu użytkownika

Po utworzeniu konta użytkownika możesz ponownie załadować informacje o użytkowniku, aby uwzględnić wszelkie zmiany, które użytkownik mógł wprowadzić na innym urządzeniu.

Dostawcy logowania

Możesz logować użytkowników do swoich aplikacji przy użyciu kilku metod: adresu e-mail i hasła, federacyjnych dostawców tożsamości oraz niestandardowego systemu uwierzytelniania. Z użytkownikiem możesz powiązać więcej niż jedną metodę logowania: na przykład użytkownik może zalogować się na to samo konto przy użyciu adresu e-mail i hasła lub przy użyciu logowania Google.

Instancje użytkowników śledzą każdego dostawcę połączonego z użytkownikiem. Umożliwia to aktualizację właściwości pustego profilu przy użyciu informacji podanych przez dostawcę. Zobacz Zarządzanie użytkownikami ( iOS , Android , internet ).

Bieżący użytkownik

Gdy użytkownik zarejestruje się lub zaloguje, stanie się bieżącym użytkownikiem instancji Auth. Instancja utrzymuje stan użytkownika, dzięki czemu odświeżenie strony (w przeglądarce) lub ponowne uruchomienie aplikacji nie powoduje utraty informacji o użytkowniku.

Kiedy użytkownik się wyloguje, instancja Auth przestaje przechowywać odniesienie do obiektu użytkownika i nie utrzymuje już swojego stanu; nie ma bieżącego użytkownika. Jednakże instancja użytkownika jest w dalszym ciągu w pełni funkcjonalna: jeśli zachowasz do niej odniesienie, nadal będziesz mieć dostęp do danych użytkownika i będziesz mógł je aktualizować.

Cykl życia użytkownika

Zalecanym sposobem śledzenia bieżącego stanu instancji Auth jest użycie detektorów (zwanych także „obserwatorami” w JavaScript). Odbiornik Auth jest powiadamiany za każdym razem, gdy coś istotnego dzieje się z obiektem Auth. Zobacz Zarządzanie użytkownikami ( iOS , Android , internet ).

Odbiornik uwierzytelniania jest powiadamiany w następujących sytuacjach:

  • Obiekt Auth kończy inicjowanie, a użytkownik był już zalogowany w poprzedniej sesji lub został przekierowany z procesu logowania dostawcy tożsamości
  • Użytkownik loguje się (bieżący użytkownik jest ustawiony)
  • Użytkownik się wylogowuje (bieżący użytkownik staje się pusty)
  • Token dostępu bieżącego użytkownika zostanie odświeżony. Taki przypadek może mieć miejsce w następujących sytuacjach:
    • Token dostępu wygasa: jest to częsta sytuacja. Token odświeżania służy do uzyskania nowego prawidłowego zestawu tokenów.
    • Użytkownik zmienia swoje hasło: Firebase wydaje nowe tokeny dostępu i odświeżania, a stare tokeny tracą ważność. Spowoduje to automatyczne wygaśnięcie tokena użytkownika i/lub wylogowanie użytkownika na każdym urządzeniu ze względów bezpieczeństwa.
    • Użytkownik dokonuje ponownego uwierzytelnienia: niektóre działania wymagają niedawnego wydania poświadczeń użytkownika; takie działania obejmują usunięcie konta, ustawienie podstawowego adresu e-mail i zmianę hasła. Zamiast wylogowywać użytkownika, a następnie ponownie się logować, uzyskaj od niego nowe poświadczenia i przekaż je do metody ponownego uwierzytelnienia obiektu użytkownika.

Samoobsługa użytkowników

Domyślnie Firebase umożliwia użytkownikom rejestrację i usuwanie kont bez interwencji administracyjnej. W wielu okolicznościach umożliwia to użytkownikom końcowym odkrycie Twojej aplikacji lub usługi oraz wejście na nią (lub poza nią) przy minimalnym tarciu.

Są jednak sytuacje, w których chcesz, aby konta użytkowników były tworzone ręcznie lub programowo przez administratora przy użyciu pakietu Admin SDK lub konsoli Firebase. W takich przypadkach możesz wyłączyć działania użytkownika na stronie Ustawienia uwierzytelniania Firebase , co uniemożliwia tworzenie i usuwanie kont przez użytkowników końcowych. Jeśli korzystasz z wielu dzierżawców, będziesz musiał wykonać żądanie HTTP , aby wyłączyć te funkcje dla poszczególnych dzierżawców.

Jeśli użytkownik końcowy spróbuje utworzyć lub usunąć konto w Twoim systemie, usługa Firebase zwróci kod błędu: auth/admin-restricted-operation w przypadku wywołań Web API lub ERROR_ADMIN_RESTRICTED_OPERATION w przypadku Androida i iOS. Powinieneś z wdziękiem uporać się z błędem na swoim interfejsie, prosząc użytkownika o podjęcie odpowiednich działań dla Twojej usługi.

Tokeny uwierzytelniające

Podczas uwierzytelniania w Firebase możesz napotkać trzy rodzaje tokenów uwierzytelniania:

Tokeny identyfikacyjne Firebase Tworzone przez Firebase, gdy użytkownik loguje się do aplikacji. Te tokeny to podpisane JWT, które bezpiecznie identyfikują użytkownika w projekcie Firebase. Tokeny te zawierają podstawowe informacje o profilu użytkownika, w tym ciąg identyfikacyjny użytkownika, który jest unikalny dla projektu Firebase. Ponieważ można zweryfikować integralność tokenów identyfikacyjnych , możesz wysłać je do serwera zaplecza w celu zidentyfikowania aktualnie zalogowanego użytkownika.
Tokeny dostawcy tożsamości Stworzone przez federacyjnych dostawców tożsamości, takich jak Google i Facebook. Te tokeny mogą mieć różne formaty, ale często są to tokeny dostępu OAuth 2.0. Aplikacje używają tych tokenów do sprawdzania, czy użytkownicy pomyślnie uwierzytelnili się u dostawcy tożsamości, a następnie konwertują je na dane uwierzytelniające, których mogą używać usługi Firebase.
Niestandardowe tokeny Firebase Utworzony przez Twój niestandardowy system uwierzytelniania, aby umożliwić użytkownikom logowanie się do aplikacji przy użyciu Twojego systemu uwierzytelniania. Tokeny niestandardowe to tokeny JWT podpisane przy użyciu klucza prywatnego konta usługi . Aplikacje korzystają z tych tokenów w podobny sposób, jak z tokenów zwracanych przez federacyjnych dostawców tożsamości.

Zweryfikowane adresy e-mail

Firebase uznaje wiadomość e-mail za zweryfikowaną, jeśli spełnia dwa warunki:

  1. Użytkownik kończy proces weryfikacji Firebase
  2. Wiadomość e-mail jest weryfikowana przez zaufanego dostawcę tożsamości, w skrócie IdP.

Dostawcy tożsamości, którzy raz weryfikują adres e-mail, a następnie pozwalają użytkownikom zmieniać adresy e-mail bez konieczności ponownej weryfikacji, nie są zaufani. Dostawcy tożsamości, którzy są właścicielami domeny lub zawsze wymagają weryfikacji, są uważani za zaufanych.

Zaufani dostawcy:

  • Google (dla adresów @gmail.com)
  • Yahoo (dla adresów @yahoo.com)
  • Microsoft (dla adresów @outlook.com i @hotmail.com)
  • Apple (zawsze weryfikowane, ponieważ konta są zawsze weryfikowane i uwierzytelniane wieloskładnikowo)

Niezaufani dostawcy:

  • Facebook
  • Świergot
  • GitHub
  • Google, Yahoo i Microsoft w przypadku domen niewydanych przez tego Dostawcę Tożsamości
  • E-mail/hasło bez weryfikacji e-mailem

W niektórych sytuacjach Firebase automatycznie połączy konta, gdy użytkownik zaloguje się u różnych dostawców przy użyciu tego samego adresu e-mail. Może się to jednak zdarzyć tylko wtedy, gdy zostaną spełnione określone kryteria. Aby zrozumieć dlaczego, rozważ następującą sytuację: użytkownik loguje się za pomocą Google przy użyciu konta @gmail.com, a złośliwy aktor tworzy konto przy użyciu tego samego adresu @gmail.com, ale loguje się przez Facebooka. Gdyby te dwa konta zostały automatycznie połączone, złośliwy aktor uzyskałby dostęp do konta użytkownika.

Poniższe przypadki opisują, kiedy automatycznie łączymy konta i kiedy zgłaszamy błąd wymagający działania użytkownika lub programisty:

  • Użytkownik loguje się u niezaufanego dostawcy, a następnie loguje się u innego niezaufanego dostawcy przy użyciu tego samego adresu e-mail (na przykład Facebook, a następnie GitHub). Powoduje to błąd wymagający połączenia konta.
  • Użytkownik loguje się u zaufanego dostawcy, a następnie loguje się u niezaufanego dostawcy przy użyciu tego samego adresu e-mail (na przykład Google, a następnie Facebook). Powoduje to błąd wymagający połączenia konta.
  • Użytkownik loguje się u niezaufanego dostawcy, a następnie loguje się u zaufanego dostawcy przy użyciu tego samego adresu e-mail (na przykład Facebook, a następnie Google). Zaufany dostawca zastępuje niezaufanego dostawcę. Jeśli użytkownik spróbuje ponownie zalogować się za pomocą Facebooka, spowoduje to błąd wymagający połączenia konta.
  • Użytkownik loguje się u zaufanego dostawcy, a następnie loguje się u innego zaufanego dostawcy, używając tego samego adresu e-mail (na przykład Apple, a następnie Google). Obaj dostawcy zostaną połączeni bez błędów.

Możesz ręcznie ustawić adres e-mail jako zweryfikowany, korzystając z pakietu Admin SDK, ale zalecamy robienie tego tylko wtedy, gdy wiesz, że użytkownik naprawdę jest właścicielem adresu e-mail.