Autenticazione con Firebase utilizzando account basati su password su piattaforme Apple

Puoi utilizzare l'autenticazione Firebase per consentire ai tuoi utenti di autenticarsi con Firebase utilizzando i propri indirizzi email e 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 > Add Packages .
  2. Quando richiesto, aggiungi il repository SDK delle piattaforme Apple Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Scegli la libreria di autenticazione Firebase.
  5. Aggiungi il flag -ObjC alla sezione Altri flag del linker delle impostazioni di build del tuo target.
  6. Al termine, Xcode inizierà automaticamente a risolvere e scaricare le tue dipendenze in background.

Successivamente, esegui alcuni passaggi di configurazione:

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

Crea un account basato su password

Per creare un nuovo account utente con una password, completa i seguenti passaggi nell'attività di accesso dell'app:

  1. Importa il modulo FirebaseCore nel tuo UIApplicationDelegate , così come tutti gli altri moduli Firebase utilizzati dal delegato dell'app. Ad esempio, per utilizzare Cloud Firestore e l'autenticazione:

    SwiftUI

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

    Veloce

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Obiettivo-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Configura un'istanza condivisa FirebaseApp nel metodo application(_:didFinishLaunchingWithOptions:) del delegato dell'app:

    SwiftUI

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

    Veloce

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

    Obiettivo-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e allegarlo alla struttura App tramite UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor . È inoltre necessario disattivare lo swizzling del delegato dell'app. Per ulteriori informazioni, consulta le istruzioni di 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. Quando un nuovo utente si iscrive utilizzando il modulo di iscrizione della tua app, completa tutti i nuovi passaggi di convalida dell'account richiesti dall'app, ad esempio verificando che la password del nuovo account sia stata digitata correttamente e soddisfi i requisiti di complessità.
  5. Crea un nuovo account passando l'indirizzo email e la password del nuovo utente a createUser .

    Veloce

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

    Obiettivo-C

    [[FIRAuth auth] createUserWithEmail:email
                               password:password
                             completion:^(FIRAuthDataResult * _Nullable authResult,
                                          NSError * _Nullable error) {
      // ...
    }];
    Se il nuovo account è stato creato correttamente, l'utente ha effettuato l'accesso ed è possibile ottenere i dati dell'account utente dall'oggetto risultato passato al metodo di callback.

Accedi come utente con un indirizzo email e una password

I passaggi per accedere a un utente con una password sono simili ai passaggi per creare un nuovo account. Nell'attività di accesso dell'app, procedi come segue:

  1. Importa il modulo FirebaseCore nel tuo UIApplicationDelegate , così come tutti gli altri moduli Firebase utilizzati dal delegato dell'app. Ad esempio, per utilizzare Cloud Firestore e l'autenticazione:

    SwiftUI

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

    Veloce

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Obiettivo-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Configura un'istanza condivisa FirebaseApp nel metodo application(_:didFinishLaunchingWithOptions:) del delegato dell'app:

    SwiftUI

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

    Veloce

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

    Obiettivo-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e allegarlo alla struttura App tramite UIApplicationDelegateAdaptor o NSApplicationDelegateAdaptor . È inoltre necessario disattivare lo swizzling del delegato dell'app. Per ulteriori informazioni, consulta le istruzioni di 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. Quando un utente accede alla tua app, trasmetti l'indirizzo email e la password dell'utente per signIn .

    Veloce

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

    Obiettivo-C

    [[FIRAuth auth] signInWithEmail:self->_emailField.text
                           password:self->_passwordField.text
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
      // ...
    }];
    Se l'utente accede correttamente, puoi ottenere i dati dell'account utente dall'oggetto risultato passato al metodo di callback.

Consigliato: abilitare la protezione dell'enumerazione dei messaggi di posta elettronica

Alcuni metodi di autenticazione Firebase che accettano indirizzi e-mail come parametri generano errori specifici se l'indirizzo e-mail non è registrato quando deve essere registrato (ad esempio, quando si accede con un indirizzo e-mail e una password) o registrato quando deve essere inutilizzato (ad esempio, quando si modifica l'indirizzo email di un utente). Anche se questo può essere utile per suggerire soluzioni specifiche agli utenti, può anche essere sfruttato da malintenzionati per scoprire gli indirizzi email registrati dai tuoi utenti.

Per mitigare questo rischio, ti consigliamo di abilitare la protezione dell'enumerazione delle email per il tuo progetto utilizzando lo strumento gcloud di Google Cloud. Tieni presente che l'abilitazione di questa funzionalità modifica il comportamento di segnalazione degli errori di Firebase Authentication: assicurati che la tua app non si basi su errori più specifici.

Prossimi passi

Dopo che un utente accede per la prima volta, viene creato un nuovo account utente e collegato alle credenziali, ovvero nome utente e password, numero di telefono o informazioni sul provider di autenticazione, con cui l'utente ha effettuato l'accesso. Questo nuovo account viene archiviato come parte del tuo progetto Firebase e può essere utilizzato per identificare un utente in ogni app del tuo progetto, indipendentemente dalla modalità di accesso dell'utente.

  • Nelle tue app puoi ottenere le informazioni di base del profilo dell'utente dall'oggetto User . Vedi Gestisci utenti .

  • Nel tuo Firebase Realtime Database e Cloud Storage Security Rules , puoi ottenere l'ID utente univoco dell'utente che ha effettuato l'accesso dalla variabile auth e utilizzarlo per controllare a quali dati può accedere un utente.

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

Per disconnettere un utente, chiamare signOut: .

Veloce

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

Obiettivo-C

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

Potresti anche voler aggiungere un codice di gestione degli errori per l'intera gamma di errori di autenticazione. Consulta Gestire gli errori .