Esegui l'autenticazione con Firebase utilizzando account basati su password sulle piattaforme Apple

Puoi utilizzare Firebase Authentication per consentire agli utenti di autenticarsi su Firebase utilizzando i loro indirizzi email e le loro password e per gestire gli account basati su password della tua app.

Prima di iniziare

Utilizza Swift Package Manager per installare e gestire le dipendenze di Firebase.

  1. In Xcode, con il progetto dell'app aperto, vai a File > Aggiungi pacchetti.
  2. Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Scegli la raccolta Firebase Authentication.
  5. Aggiungi il flag -ObjC alla sezione Altri flag linker delle impostazioni di build del target.
  6. Al termine, Xcode inizierà automaticamente a risolvere e a scaricare le tue dipendenze in background.

Poi esegui alcuni passaggi di configurazione:

  1. Se non hai ancora collegato l'app al progetto Firebase, fallo dalla console Firebase.
  2. Abilita l'accesso con email/password:
    1. Nella console Firebase, apri sezione Auth.
    2. Nella scheda Metodo di accesso, attiva il metodo di accesso Email/password e fai clic su Salva.

Creare un account basato su password

Per creare un nuovo account utente con una password, completa i seguenti passaggi in attività di accesso della tua app:

  1. Importa il modulo FirebaseCore in UIApplicationDelegate, nonché eventuali altri moduli Firebase utilizzati dal tuo app delegate. Ad esempio, per utilizzare Cloud Firestore e Authentication:

    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. Configura un FirebaseApp nel delegato della tua applicazione Metodo application(_:didFinishLaunchingWithOptions:):

    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. Se utilizzi SwiftUI, devi creare un delegato per l'applicazione e collegarlo al tuo struct App tramite UIApplicationDelegateAdaptor oppure NSApplicationDelegateAdaptor. Devi anche disattivare lo scambio del delegato dell'app. Per Per ulteriori informazioni, consulta le istruzioni di SwiiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Quando un nuovo utente si registra utilizzando il modulo di registrazione della tua app, compila qualsiasi nuovo i passaggi di convalida dell'account richiesti dalla tua app, ad esempio la verifica della la password del nuovo account è stata digitata correttamente e soddisfa le tue esigenze di complessità i tuoi requisiti.
  5. Crea un nuovo account passando l'indirizzo email e la password del nuovo utente a 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) {
      // ...
    }];
    Se il nuovo account è stato creato correttamente, l'utente ha eseguito l'accesso e può recuperare i dati dell'account dell'utente dall'oggetto risultato che viene passato di callback di Google.

Accedere a un utente con un indirizzo email e una password

La procedura per accedere a un utente con una password è simile a quella per creando un nuovo account. Nell'attività di accesso della tua app, procedi nel seguente modo:

  1. Importa il modulo FirebaseCore nel tuo UIApplicationDelegate e tutti gli altri Moduli Firebase utilizzati dal delegato della tua app. Ad esempio, per utilizzare Cloud Firestore e Authentication:

    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. Configura un FirebaseApp nell'account del delegato della tua applicazione Metodo application(_:didFinishLaunchingWithOptions:):

    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. Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e collegarlo alla struct App tramite UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor. Devi anche disattivare lo scambio del delegato dell'app. Per Per ulteriori informazioni, consulta le istruzioni di SwiiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. Quando un utente accede alla tua app, trasmetti l'indirizzo email e password per 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) {
      // ...
    }];
    Se l'utente accede correttamente, puoi recuperare i dati del suo account dall'oggetto risultato passato al metodo di callback.

Opzione consigliata: abilita la protezione dall'enumerazione delle email

Alcuni metodi Firebase Authentication che accettano indirizzi email come parametri generano errori specifici se l'indirizzo email non è registrato quando deve esserlo (ad esempio, quando accedi con un indirizzo email e una password) o se è registrato quando deve essere inutilizzato (ad esempio, quando modifichi l'indirizzo email di un utente). Questo può essere utile per suggerire rimedi specifici agli utenti, ma può anche essere utilizzato in modo illecito da malintenzionati per scoprire gli indirizzi email registrati dai tuoi utenti.

Per ridurre questo rischio, ti consigliamo di attivare la protezione dall'enumerazione delle email per il tuo progetto usando lo strumento gcloud di Google Cloud. Tieni presente che l'attivazione di questa funzionalità cambia il comportamento di generazione di report sugli errori di Firebase Authentication: assicurati che la tua app non si basi sugli errori più specifici.

Passaggi successivi

Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente e collegati alle credenziali, ovvero nome utente, password, numero o informazioni del provider di autenticazione, ovvero l'utente con cui ha eseguito l'accesso. Questo nuovo viene archiviato come parte del progetto Firebase e può essere utilizzato per identificare a un utente in ogni app del progetto, a prescindere da come esegue l'accesso.

  • Nelle tue app puoi ottenere le informazioni di base del profilo dell'utente dal User . Vedi Gestire gli utenti.

  • In Firebase Realtime Database e Cloud Storage Regole di sicurezza, puoi ottieni l'ID utente unico dell'utente che ha eseguito l'accesso dalla variabile auth, e usarli per controllare i dati a cui un utente può accedere.

Puoi consentire agli utenti di accedere alla tua app utilizzando più autenticazioni collegando le credenziali del provider di autenticazione a un a un account utente esistente.

Per far uscire un utente, chiama 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;
}

Potresti anche voler aggiungere il codice per la gestione degli errori per l'intero intervallo di autenticazione errori. Vedi Gestire gli errori.