Crea un utente
Puoi creare un nuovo utente nel tuo progetto Firebase in quattro modi:
- Chiama il metodo
createUserWithEmailAndPassword()
. - Accedi per la prima volta come utente utilizzando un provider di identità federata, come Accedi con Google, Accesso con Facebook o Apple.
Puoi anche creare nuovi utenti autenticati con password dalla sezione Autenticazione della console Firebase, nella pagina Utenti.
Ottenere il profilo di un utente
Per ottenere le informazioni del profilo di un utente, utilizza le proprietà di User
. Esistono
tre modi per ottenere un oggetto User
che rappresenta l'utente corrente:
Gli stream
authStateChanges
,idTokenChanges
euserChanges
: i tuoi ascoltatori riceveranno l'User
corrente o l'null
se nessun utente è autenticato:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
All'avvio dell'app, viene attivato un evento dopo il ripristino delle credenziali utente (se presenti) dallo spazio di archiviazione locale, il che significa che i listener vengono sempre chiamati quando lo stato utente viene inizializzato. Poi, ogni volta che lo stato di autenticazione cambia, viene generato un nuovo evento con lo stato utente aggiornato.
Ascoltando lo stato di autenticazione, puoi creare un'interfaccia utente che reagisce a queste modifiche dello stato di autenticazione. Non inserire
authStateChanges().listen(...)
direttamente all'interno del metodo di creazione di un widget, in quanto verrà creata una nuova iscrizione a ogni ricompilazione. Se devi aggiornare la UI in risposta allo stato di autenticazione, utilizza unStreamBuilder
:StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: user.uid); }, )
Questo approccio garantisce la ricostruzione automatica dell'albero dei widget quando lo stato di autenticazione dell'utente cambia.
L'oggetto
UserCredential
restituito dai metodi di autenticazione (signIn
-) l'oggettoUserCredential
ha una proprietàuser
con l'attualeUser
:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);
La proprietà
currentUser
dell'istanzaFirebaseAuth
: se hai la certezza che l'utente abbia eseguito l'accesso, puoi accedere aUser
dalla proprietàcurrentUser
:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }
Il
currentUser
può esserenull
per due motivi:- L'utente non ha eseguito l'accesso.
- L'inizializzazione dell'oggetto di autenticazione non è stata completata. Se utilizzi un listener per monitorare lo stato di accesso dell'utente, non devi gestire questo caso.
Ottenere le informazioni del profilo specifiche del fornitore di un utente
Per ottenere le informazioni del profilo recuperate dai provider di accesso collegati a un utente, utilizza la proprietà providerData
. Ad esempio:
if (user != null) {
for (final providerProfile in user.providerData) {
// ID of the provider (google.com, apple.com, etc.)
final provider = providerProfile.providerId;
// UID specific to the provider
final uid = providerProfile.uid;
// Name, email address, and profile photo URL
final name = providerProfile.displayName;
final emailAddress = providerProfile.email;
final profilePhoto = providerProfile.photoURL;
}
}
Aggiornare il profilo di un utente
Puoi aggiornare le informazioni di base del profilo di un utente, ovvero il nome visualizzato
e l'URL della foto del profilo, con i metodi update
. Ad esempio:
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
Impostare l'indirizzo email di un utente
Puoi impostare l'indirizzo email di un utente con il metodo updateEmail()
. Ad esempio:
await user?.updateEmail("janeq@example.com");
Inviare un'email di verifica a un utente
Puoi inviare un'email di verifica dell'indirizzo a un utente con il metodo sendEmailVerification()
. Ad esempio:
await user?.sendEmailVerification();
Puoi personalizzare il modello di email utilizzato nella sezione Autenticazione della Console Firebase, nella pagina Modelli email. Consulta Modelli email nel Centro assistenza Firebase.
È anche possibile passare lo stato tramite un URL di continuazione per reindirizzare l'utente all'app quando invia un'email di verifica.
Inoltre, puoi localizzare l'email di verifica aggiornando il codice della lingua nell'istanza Auth prima di inviare l'email. Ad esempio:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
Impostare la password di un utente
Puoi impostare la password di un utente con il metodo updatePassword()
. Ad esempio:
await user?.updatePassword(newPassword);
Inviare un'email di reimpostazione della password
Puoi inviare un'email di reimpostazione della password a un utente con il metodo sendPasswordResetEmail()
. Ad esempio:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
Puoi personalizzare il modello di email utilizzato nella sezione Autenticazione della Console Firebase, nella pagina Modelli email. Consulta Modelli email nel Centro assistenza Firebase.
È anche possibile passare lo stato tramite un URL di continuazione per reindirizzare l'utente all'app quando invia un'email di reimpostazione della password.
Inoltre, puoi localizzare l'email di reimpostazione della password aggiornando il codice della lingua nell'istanza Auth prima di inviare l'email. Ad esempio:
await FirebaseAuth.instance.setLanguageCode("fr");
Puoi anche inviare email di reimpostazione della password dalla console Firebase.
Eliminare un utente
Puoi eliminare un account utente con il metodo delete()
. Ad esempio:
await user?.delete();
Puoi anche eliminare gli utenti dalla sezione Autenticazione della console Firebase, nella pagina Utenti.
Eseguire nuovamente l'autenticazione di un utente
Alcune azioni sensibili alla sicurezza, come
l'eliminazione di un account,
l'impostazione di un indirizzo email principale e
la modifica di una password, richiedono che l'utente abbia
eseguito l'accesso di recente. Se esegui una di queste azioni e l'utente ha eseguito l'accesso
troppo tempo fa, l'azione non va a buon fine e viene generato un FirebaseAuthException
con il codice
requires-recent-login
.
In questo caso, esegui nuovamente l'autenticazione dell'utente ottenendo nuove credenziali di accesso
e trasmettendole a reauthenticate
. Ad esempio:
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
Importare account utente
Puoi importare gli account utente da un file nel tuo progetto Firebase utilizzando il comando
auth:import
della CLI Firebase. Ad esempio:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14