Collega la tua app a Firebase
Installa e inizializza gli SDK Firebase per Flutter se non l'hai già fatto.
Aggiungi l'autenticazione Firebase alla tua app
Dalla radice del tuo progetto Flutter, esegui il seguente comando per installare il plug-in:
flutter pub add firebase_auth
Una volta completata, ricostruisci la tua applicazione Flutter:
flutter run
Importa il plugin nel tuo 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 Autenticazione Firebase per abilitare l'accesso tramite e-mail/password e qualsiasi altro provider di identità che desideri per la tua app.
(Facoltativo) Prototipazione e test con Firebase Local Emulator Suite
Prima di parlare di come la tua app autentica gli utenti, introduciamo una serie di strumenti che puoi utilizzare per prototipare e testare la funzionalità di autenticazione: Firebase Local Emulator Suite. Se stai decidendo tra tecniche e provider di autenticazione, provando diversi modelli di dati con dati pubblici e privati utilizzando l'autenticazione e le regole di sicurezza Firebase o prototipando progetti di interfaccia utente di accesso, essere in grado di lavorare localmente senza distribuire servizi live può essere un'ottima idea .
Un emulatore di autenticazione fa parte di Local Emulator Suite, che consente all'app di interagire con il contenuto 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 richiede solo pochi passaggi:
Aggiunta di una riga di codice alla configurazione di test dell'app per la connessione all'emulatore.
Dalla radice della directory del tuo progetto locale, eseguendo
firebase emulators:start
.Utilizzo dell'interfaccia utente di Local Emulator Suite per la prototipazione interattiva o dell'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 Collega la tua app all'emulatore di autenticazione . Per ulteriori informazioni, vedere l' introduzione di Local Emulator Suite .
Ora continuiamo con come autenticare gli utenti.
Controlla lo stato di autenticazione corrente
Firebase Auth fornisce molti metodi e utilità per consentire l'integrazione dell'autenticazione sicura nell'applicazione Flutter nuova o esistente. In molti casi, dovrai conoscere lo stato di autenticazione del tuo utente, ad esempio se è connesso o disconnesso.
Firebase Auth ti consente di iscriverti in tempo reale a questo stato tramite uno Stream
. Una volta chiamato, il flusso fornisce un evento immediato dello stato di autenticazione corrente dell'utente, quindi fornisce eventi successivi ogni volta che lo stato di autenticazione cambia.
Esistono tre metodi per ascoltare le modifiche allo stato di autenticazione:
authStateChanges()
Per sottoscrivere queste modifiche, chiama il metodo authStateChanges()
sulla tua 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 che l'ascoltatore è stato registrato.
- Quando un utente ha effettuato l'accesso.
- Quando l'utente corrente è disconnesso.
idTokenChanges()
Per sottoscrivere queste modifiche, chiama il metodo idTokenChanges()
sulla tua 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 che l'ascoltatore è stato registrato.
- Quando un utente ha effettuato l'accesso.
- Quando l'utente corrente è disconnesso.
- Quando c'è una modifica nel token dell'utente corrente.
- Un utente accede o si autentica nuovamente dopo la modifica delle attestazioni personalizzate. Il token ID emesso di conseguenza conterrà le ultime attestazioni.
- Una sessione utente esistente ottiene l'aggiornamento del token ID dopo la scadenza di un token precedente.
- Un token ID viene aggiornato forzatamente chiamando
FirebaseAuth.instance.currentUser.getIdTokenResult(true)
.
Per ulteriori dettagli, vedere Propagazione delle attestazioni personalizzate al client
userChanges()
Per sottoscrivere queste modifiche, chiama il metodo userChanges()
sulla tua 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 che l'ascoltatore è stato registrato.
- Quando un utente ha effettuato l'accesso.
- Quando l'utente corrente è disconnesso.
- Quando c'è una modifica nel token dell'utente corrente.
- Quando vengono chiamati i seguenti metodi forniti da
FirebaseAuth.instance.currentUser
:-
reload()
-
unlink()
-
updateEmail()
-
updatePassword()
-
updatePhoneNumber()
-
updateProfile()
-
idTokenChanges()
, userChanges()
e authStateChanges()
non verranno attivati se disabiliti o elimini l' User
con Firebase Admin SDK o la console Firebase. Dovrai forzare un ricaricamento utilizzando FirebaseAuth.instance.currentUser.reload()
, che causerà un'eccezione user-disabled
o user-not-found
che puoi rilevare e gestire nel codice dell'app.
Stato di autenticazione persistente
Gli SDK Firebase per tutte le piattaforme forniscono un supporto pronto all'uso per garantire che lo stato di autenticazione dell'utente venga mantenuto durante il riavvio dell'app o il ricaricamento della pagina.
Su piattaforme native come Android e iOS, questo comportamento non è configurabile e lo stato di autenticazione dell'utente verrà mantenuto sul dispositivo tra il riavvio 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 è archiviato in IndexedDB . È possibile modificare la persistenza per archiviare i dati nella memoria locale utilizzando Persistence.LOCAL
. Se necessario, è possibile modificare questo comportamento predefinito in modo che persista solo lo stato di autenticazione per la sessione corrente o per non farlo affatto. Per configurare queste impostazioni, chiama il metodo seguente 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);
Prossimi passi
Esplora le guide sull'accesso e la registrazione degli utenti con i servizi di identità e autenticazione supportati.