Catch up on highlights from Firebase at Google I/O 2023. Learn more

Uwierzytelniaj się w Firebase przy użyciu kont opartych na hasłach na platformach Apple

Możesz użyć uwierzytelniania Firebase, aby umożliwić użytkownikom uwierzytelnianie w Firebase przy użyciu ich adresów e-mail i haseł oraz zarządzać kontami aplikacji opartymi na hasłach.

Zanim zaczniesz

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

  1. W Xcode przy otwartym projekcie aplikacji przejdź do File > Add Packages .
  2. Po wyświetleniu monitu dodaj repozytorium Firebase Apple platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Wybierz bibliotekę uwierzytelniania Firebase.
  5. Po zakończeniu Xcode automatycznie rozpocznie rozwiązywanie i pobieranie zależności w tle.

Następnie wykonaj kilka kroków konfiguracyjnych:

  1. Jeśli nie połączyłeś jeszcze swojej aplikacji z projektem Firebase, zrób to z poziomu konsoli Firebase .
  2. Włącz logowanie e-mailem/hasłem:
    1. W konsoli Firebase otwórz sekcję Auth .
    2. Na karcie Metoda logowania włącz metodę logowania E-mail/hasło i kliknij Zapisz .

Utwórz konto oparte na haśle

Aby utworzyć nowe konto użytkownika z hasłem, wykonaj następujące czynności związane z logowaniem się do aplikacji:

  1. Zaimportuj moduł FirebaseCore do swojego UIApplicationDelegate , a także wszelkie inne moduły Firebase, z których korzysta delegat aplikacji. Na przykład, aby użyć Cloud Firestore i uwierzytelniania:

    SwiftUI

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

    Szybki

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Cel C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Skonfiguruj udostępnioną instancję FirebaseApp w metodzie application application(_:didFinishLaunchingWithOptions:) delegata aplikacji:

    SwiftUI

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

    Szybki

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

    Cel C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go do struktury App za pośrednictwem UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor . Musisz także wyłączyć przełączanie delegatów aplikacji. Aby uzyskać więcej informacji, zobacz instrukcje SwiftUI .

    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 zarejestruje się za pomocą formularza rejestracji Twojej aplikacji, wykonaj wszystkie kroki weryfikacji nowego konta wymagane przez aplikację, takie jak sprawdzenie, czy hasło do nowego konta zostało poprawnie wpisane i spełnia wymagania dotyczące złożoności.
  5. Utwórz nowe konto, przekazując adres e-mail i hasło nowego użytkownika do createUser .

    Szybki

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

    Cel C

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

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

Kroki logowania użytkownika za pomocą hasła są podobne do kroków tworzenia nowego konta. Podczas logowania w aplikacji wykonaj te czynności:

  1. Zaimportuj moduł FirebaseCore do swojego UIApplicationDelegate , a także wszelkie inne moduły Firebase, z których korzysta delegat aplikacji. Na przykład, aby użyć Cloud Firestore i uwierzytelniania:

    SwiftUI

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

    Szybki

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Cel C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Skonfiguruj udostępnioną instancję FirebaseApp w metodzie application application(_:didFinishLaunchingWithOptions:) delegata aplikacji:

    SwiftUI

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

    Szybki

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

    Cel C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Jeśli używasz SwiftUI, musisz utworzyć delegata aplikacji i dołączyć go do struktury App za pośrednictwem UIApplicationDelegateAdaptor lub NSApplicationDelegateAdaptor . Musisz także wyłączyć przełączanie delegatów aplikacji. Aby uzyskać więcej informacji, zobacz instrukcje SwiftUI .

    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ę do Twojej aplikacji, przekaż adres e-mail użytkownika i hasło do signIn .

    Szybki

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

    Cel C

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

Zalecane: Włącz ochronę wyliczania wiadomości e-mail

Niektóre metody uwierzytelniania Firebase, które przyjmują adresy e-mail jako parametry, zgłaszają określone błędy, jeśli adres e-mail jest niezarejestrowany, gdy musi być zarejestrowany (na przykład podczas logowania za pomocą adresu e-mail i hasła) lub zarejestrowany, gdy musi być nieużywany (na przykład przy zmianie adresu e-mail użytkownika). Chociaż może to być pomocne w sugerowaniu użytkownikom konkretnych środków zaradczych, może być również nadużywane przez złośliwe podmioty w celu odkrycia adresów e-mail zarejestrowanych przez użytkowników.

Aby ograniczyć to ryzyko, zalecamy włączenie ochrony wyliczania e-maili w projekcie za pomocą narzędzia Google Cloud gcloud . Pamiętaj, że włączenie tej funkcji zmienia zachowanie raportowania błędów uwierzytelniania Firebase: upewnij się, że Twoja aplikacja nie polega na bardziej szczegółowych błędach.

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z poświadczeniami — czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania — za pomocą których użytkownik się logował. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikacji użytkownika w każdej aplikacji w Twoim projekcie, niezależnie od tego, jak użytkownik się loguje.

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

  • W regułach bezpieczeństwa Firebase Realtime Database i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się do Twojej aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.

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

Szybki

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

Cel C

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

Możesz także dodać kod obsługi błędów dla pełnego zakresu błędów uwierzytelniania. Zobacz Obsługa błędów .