Uwierzytelniaj za pomocą Firebase za pomocą kont opartych na haśle na platformach Apple

Uwierzytelnianie Firebase pozwala użytkownikom na uwierzytelnianie w Firebase za pomocą ich adresów e-mail i haseł oraz do zarządzania kontami opartymi na hasłach w aplikacji.

Zanim zaczniesz

Użyj menedżera pakietów Swift, aby zainstalować zależności Firebase i nimi zarządzać.

  1. Po otwarciu projektu aplikacji przejdź w Xcode do File > Add Packages (Plik > Dodaj pakiety).
  2. Gdy pojawi się prośba, dodaj repozytorium SDK platform Apple Platform SDK Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Wybierz bibliotekę uwierzytelniania Firebase.
  5. Dodaj flagę -ObjC do sekcji Inne flagi łączące w ustawieniach kompilacji celu.
  6. Po zakończeniu Xcode automatycznie rozpocznie rozpoznawanie i pobieranie zależności w tle.

Następnie wykonaj kilka czynności konfiguracyjnych:

  1. Jeśli Twoja aplikacja nie jest jeszcze połączona z projektem Firebase, możesz to zrobić z poziomu konsoli Firebase.
  2. Włącz logowanie za pomocą adresu e-mail/hasła:
    1. W konsoli Firebase otwórz sekcję Uwierzytelnianie.
    2. Na karcie Metoda logowania włącz metodę logowania E-mail/hasło i kliknij Zapisz.

Tworzenie konta opartego na haśle

Aby utworzyć nowe konto użytkownika z hasłem, wykonaj te czynności związane z logowaniem w aplikacji:

  1. Zaimportuj moduł FirebaseCore do obiektu UIApplicationDelegate, a także wszystkie inne moduły Firebase używane przez przedstawiciela aplikacji. Aby na przykład użyć Cloud Firestore i Uwierzytelniania:

    Certyfikat SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Skonfiguruj współdzieloną instancję FirebaseApp w metodzie application(_:didFinishLaunchingWithOptions:) przedstawiciela aplikacji:

    Certyfikat SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Jeśli używasz SwiftUI, musisz utworzyć przedstawiciela aplikacji i dołączyć go do struktury App za pomocą UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor. Musisz też wyłączyć przełączanie przekazywania dostępu do aplikacji. Więcej informacji znajdziesz w instrukcjach SwiftUI.

    Certyfikat SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Gdy nowy użytkownik rejestruje się za pomocą formularza rejestracyjnego w Twojej aplikacji, wykonaj wszystkie wymagane przez aplikację kroki weryfikacji konta, np. sprawdź, czy hasło do nowego konta jest wpisane prawidłowo i czy spełnia wymagania Twojej firmy.
  5. Utwórz nowe konto, przesyłając jego adres e-mail i hasło na adres createUser.

    Swift

    Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
      // ...
    }

    Objective-C

    [[FIRAuth auth] createUserWithEmail:email
                               password:password
                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                          NSError * _Nullable error) {
      // ...
    }];
    Jeśli nowe konto zostało utworzone, użytkownik jest zalogowany, a Ty możesz pobrać dane konta użytkownika z obiektu wynikowego, który jest przekazywany do metody wywołania zwrotnego.

Logowanie użytkownika za pomocą adresu e-mail i hasła

Procedura logowania użytkownika za pomocą hasła jest podobna do procedury tworzenia nowego konta. W sekcji aktywności związanej z logowaniem się w aplikacji wykonaj te czynności:

  1. Zaimportuj moduł FirebaseCore do obiektu UIApplicationDelegate, a także wszystkie inne moduły Firebase używane przez przedstawiciela aplikacji. Aby na przykład użyć Cloud Firestore i Uwierzytelniania:

    Certyfikat SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Skonfiguruj współdzieloną instancję FirebaseApp w metodzie application(_:didFinishLaunchingWithOptions:) przedstawiciela aplikacji:

    Certyfikat SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Jeśli używasz SwiftUI, musisz utworzyć przedstawiciela aplikacji i dołączyć go do struktury App za pomocą UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor. Musisz też wyłączyć przełączanie przekazywania dostępu do aplikacji. Więcej informacji znajdziesz w instrukcjach SwiftUI.

    Certyfikat SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Gdy użytkownik loguje się w Twojej aplikacji, przekaż jego adres e-mail i hasło do signIn.

    Swift

    Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
      guard let strongSelf = self else { return }
      // ...
    }

    Objective-C

    [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
      // ...
    }];
    Jeśli użytkownik się zaloguje, możesz pobrać dane konta użytkownika z obiektu wyniku przekazywanego do metody wywołania zwrotnego.

Zalecane: włącz ochronę wyliczania e-maili

Niektóre metody uwierzytelniania Firebase, które przyjmują adresy e-mail jako parametry, powodują wystąpienie błędów, jeśli adres e-mail nie jest zarejestrowany, gdy trzeba go zarejestrować (np. podczas logowania się za pomocą adresu e-mail i hasła), lub rejestruje, gdy musi być nieużywany (np. podczas zmiany adresu e-mail użytkownika). Może to być pomocne przy podpowiadaniu użytkownikom konkretnych środków zaradczych. Może też być wykorzystywane przez nieuczciwe podmioty do wykrycia adresów e-mail zarejestrowanych przez użytkowników.

Aby ograniczyć to ryzyko, zalecamy włączenie w projekcie ochrony przed wyliczeniem adresów e-mail za pomocą narzędzia Google Cloud gcloud. Pamiętaj, że włączenie tej funkcji zmienia sposób raportowania błędów Uwierzytelniania Firebase: dopilnuj, aby aplikacja nie korzystała z bardziej szczegółowych błędów.

Dalsze kroki

Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z danymi logowania (nazwa użytkownika i hasło, numer telefonu lub informacje o dostawcy uwierzytelniania). Nowe konto jest przechowywane w ramach Twojego projektu Firebase i może być używane do identyfikowania użytkowników we wszystkich aplikacjach w Twoim projekcie niezależnie od tego, jak się on loguje.

  • W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu User . Zobacz Zarządzanie użytkownikami.

  • W regułach zabezpieczeń Bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz pobrać ze zmiennej auth unikalny identyfikator użytkownika zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu różnych dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj signOut:.

Swift

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Objective-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Możesz też dodać kod obsługi błędów dla pełnego zakresu błędów uwierzytelniania. Patrz sekcja Obsługa błędów.