Inizia a utilizzare Firebase Authentication su Flutter

Connetti la tua app a Firebase

Installa e inizializza gli SDK Firebase per Flutter, se non l'hai già fatto.

Aggiungi Firebase Authentication alla tua app

  1. Dalla radice del progetto Flutter, esegui il seguente comando per installare il plug-in:

    flutter pub add firebase_auth
    
  2. Al termine, ricompila l'applicazione Flutter:

    flutter run
    
  3. Importa il plug-in nel codice Dart:

    import 'package:firebase_auth/firebase_auth.dart';
    

Per utilizzare un provider di autenticazione, devi abilitarlo nella console Firebase. Vai alla pagina Metodo di accesso nella sezione Firebase Authentication per abilitare l'accesso con email/password e tutti gli altri provider di identità che vuoi utilizzare per la tua app.

(Facoltativo) Crea prototipi ed esegui test con Firebase Local Emulator Suite

Prima di parlare di come la tua app autentica gli utenti, presentiamo un insieme di strumenti che puoi utilizzare per creare prototipi e testare la funzionalità di autenticazione: Firebase Local Emulator Suite. Se stai scegliendo tra tecniche e provider di autenticazione, provando diversi modelli di dati con dati pubblici e privati utilizzando Authentication e le regole di sicurezza di Firebase o creando prototipi di UI di accesso, può essere una buona idea poter lavorare localmente senza eseguire il deployment dei servizi live.

Un emulatore di autenticazione fa parte di Local Emulator Suite, che consente alla tua app di interagire con i contenuti e la configurazione del database emulato, nonché, facoltativamente, con le risorse del progetto emulato (funzioni, altri database e regole di sicurezza).

L'utilizzo dell'emulatore di autenticazione prevede alcuni passaggi:

  1. Aggiungere una riga di codice alla configurazione di test dell'app per connettersi all'emulatore.

  2. Eseguire firebase emulators:start dalla radice della directory del progetto locale.

  3. Utilizzare l'UI di Local Emulator Suite per la creazione di prototipi interattivi o l'API REST dell'emulatore di autenticazione per i test non interattivi.

  4. Chiama useAuthEmulator() per specificare l'indirizzo e la porta dell'emulatore:

    Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    
    // Ideal time to initialize
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
    //...
    }
    

Una guida dettagliata è disponibile all'indirizzo Connetti la tua app all'emulatore di autenticazione. Per ulteriori informazioni, consulta l'introduzione a Local Emulator Suite.

Ora continuiamo con la procedura di autenticazione degli utenti.

Controlla lo stato di autenticazione attuale

Firebase Auth fornisce molti metodi e utilità per consentirti di integrare l'autenticazione sicura nella tua applicazione Flutter nuova o esistente. In molti casi, dovrai conoscere lo stato di autenticazione dell'utente, ad esempio se ha eseguito l'accesso o meno.

Firebase Auth ti consente di abbonarti in tempo reale a questo stato tramite un Stream. Una volta chiamato, lo stream fornisce un evento immediato dello stato di autenticazione attuale dell'utente e poi fornisce eventi successivi ogni volta che lo stato di autenticazione cambia.

Esistono tre metodi per ascoltare le modifiche dello stato di autenticazione:

authStateChanges()

Per abbonarti a queste modifiche, chiama il metodo authStateChanges() sull'istanza FirebaseAuth:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Gli eventi vengono attivati quando si verifica quanto segue:

  • Subito dopo la registrazione del listener.
  • Quando un utente ha eseguito l'accesso.
  • Quando l'utente attuale ha eseguito la disconnessione.

idTokenChanges()

Per abbonarti a queste modifiche, chiama il metodo idTokenChanges() sull'istanza FirebaseAuth:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Gli eventi vengono attivati quando si verifica quanto segue:

  • Subito dopo la registrazione del listener.
  • Quando un utente ha eseguito l'accesso.
  • Quando l'utente attuale ha eseguito la disconnessione.
  • Quando si verifica una modifica nel token dell'utente attuale.

userChanges()

Per abbonarti a queste modifiche, chiama il metodo userChanges() sull'istanza FirebaseAuth:

FirebaseAuth.instance
  .userChanges()
  .listen((User? user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Gli eventi vengono attivati quando si verifica quanto segue:

  • Subito dopo la registrazione del listener.
  • Quando un utente ha eseguito l'accesso.
  • Quando l'utente attuale ha eseguito la disconnessione.
  • Quando si verifica una modifica nel token dell'utente attuale.
  • Quando vengono chiamati i seguenti metodi forniti da FirebaseAuth.instance.currentUser:
    • reload()
    • unlink()
    • updateEmail()
    • updatePassword()
    • updatePhoneNumber()
    • updateProfile()

Persistenza dello stato di autenticazione

Gli SDK Firebase per tutte le piattaforme forniscono il supporto predefinito per garantire che lo stato di autenticazione dell'utente venga mantenuto durante i riavvii dell'app o i ricaricamenti della pagina.

Sulle piattaforme native come Android e iOS, questo comportamento non è configurabile e lo stato di autenticazione dell'utente verrà mantenuto sul dispositivo tra i riavvii dell'app. L'utente può cancellare i dati memorizzati nella cache delle app utilizzando le impostazioni del dispositivo, che cancelleranno qualsiasi stato esistente memorizzato.

Sulle piattaforme web, lo stato di autenticazione dell'utente viene memorizzato in IndexedDB. Puoi modificare la persistenza per archiviare i dati nello spazio di archiviazione locale utilizzando Persistence.LOCAL. Se necessario, puoi modificare questo comportamento predefinito in modo da mantenere lo stato di autenticazione solo per la sessione corrente o non mantenerlo affatto. Per configurare queste impostazioni, chiama il seguente metodo FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);. Puoi comunque aggiornare la persistenza per ogni istanza di autenticazione utilizzando setPersistence(Persistence.NONE).

// Disable persistence on web platforms. Must be called on initialization:
final auth = FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.NONE);
// To change it after initialization, use `setPersistence()`:
await auth.setPersistence(Persistence.LOCAL);

Passaggi successivi

Esplora le guide sull'accesso e sulla registrazione degli utenti con i servizi di identità e autenticazione supportati.