Collegare l'app a Firebase
Installa e inizializza gli SDK Firebase per Flutter, se non l'hai ancora fatto.
Aggiungere l'autenticazione Firebase all'app
Dalla radice del progetto Flutter, esegui questo comando per installare il plug-in:
flutter pub add firebase_auth
Al termine, ricostruisci l'applicazione Flutter:
flutter run
Importa il plug-in nel codice Dart:
import 'package:firebase_auth/firebase_auth.dart';
Per utilizzare un provider di autenticazione, devi attivarlo nella console Firebase. Vai alla pagina Metodo di accesso nella sezione Firebase Authentication per abilitare l'accesso tramite email/password e qualsiasi altro provider di identità 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 un prototipo e testare la funzionalità di autenticazione: Firebase Local Emulator Suite. Se stai decidendo tra le tecniche di autenticazione e provider, provando diversi modelli di dati con dati pubblici e privati utilizzando le regole di sicurezza di Authentication e Firebase o la prototipazione di progetti di UI per l'accesso, in modo da poter di lavorare localmente senza eseguire il deployment di servizi live può essere un'ottima idea.
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 emulati, nonché, facoltativamente, con le risorse del progetto emulate (funzioni, altri database e regole di sicurezza).
L'utilizzo dell'emulatore di autenticazione prevede solo pochi passaggi:
Aggiunta di una riga di codice alla configurazione di test dell'app per connettersi all'emulatore.
Dalla directory principale del progetto locale, esegui
firebase emulators:start
.Utilizzo dell'interfaccia utente di Local Emulator Suite per la prototipazione interattiva oppure API REST dell'emulatore di autenticazione per test non interattivi.
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 Collegare l'app all'emulatore di autenticazione. Per ulteriori informazioni, consulta l'introduzione a Local Emulator Suite.
Ora vediamo come autenticare gli utenti.
Controlla lo stato attuale dell'autenticazione
Firebase Auth offre 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 corrente dell'utente e poi fornisce eventi successivi ogni volta che lo stato di autenticazione cambia.
Esistono tre metodi per ascoltare le modifiche allo stato dell'autenticazione:
authStateChanges()
Per iscriverti a queste modifiche, chiama il metodo authStateChanges()
sul tuo
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 nei seguenti casi:
- Subito dopo la registrazione dell'ascoltatore.
- Quando un utente ha eseguito l'accesso.
- Quando l'utente corrente è disconnesso.
idTokenChanges()
Per iscriverti a queste modifiche, chiama il metodo idTokenChanges()
sul tuo
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 nei seguenti casi:
- Subito dopo la registrazione dell'ascoltatore.
- Quando un utente ha eseguito l'accesso.
- Quando l'utente corrente è disconnesso.
- In caso di modifica del token dell'utente corrente.
userChanges()
Per iscriverti a queste modifiche, chiama il metodo userChanges()
sul tuo
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 verificano le seguenti condizioni:
- Subito dopo la registrazione dell'ascoltatore.
- Quando un utente ha eseguito l'accesso.
- Quando l'utente corrente è disconnesso.
- In caso di modifica del token dell'utente corrente.
- Quando vengono chiamati i seguenti metodi forniti da
FirebaseAuth.instance.currentUser
:reload()
unlink()
updateEmail()
updatePassword()
updatePhoneNumber()
updateProfile()
Stato dell'autenticazione persistente
Gli SDK Firebase per tutte le piattaforme forniscono supporto immediato per garantire che lo stato di autenticazione dell'utente venga mantenuto in caso di riavvio dell'app o ricarica della pagina.
Su piattaforme native come Android e iOS, questo comportamento non è configurabile e lo stato dell'autenticazione dell'utente sarà mantenuto sul dispositivo tra le app si riavvia. L'utente può cancellare i dati memorizzati nella cache delle app utilizzando le impostazioni del dispositivo, in modo da eliminare qualsiasi stato esistente memorizzato.
Sulle piattaforme web, lo stato di autenticazione dell'utente viene archiviato 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
stato di autenticazione per la sessione corrente o non del tutto. Per configurare queste
impostazioni, chiama il seguente metodo FirebaseAuth.instanceFor(app: Firebase.app(), persistence: Persistence.LOCAL);
.
Puoi comunque aggiornare la persistenza per ogni istanza Auth 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
Consulta le guide sull'accesso e sulla registrazione degli utenti con i servizi di identità e autenticazione supportati.