Crea un utente
Hai le seguenti opzioni per creare un nuovo utente:
Dalla tua app: crea un nuovo utente nel tuo progetto Firebase chiamando il
createUserWithEmailAndPassword()metodo o accedendo per la prima volta con un utente utilizzando un provider di identità federata, come Accedi con Google, Accedi con Facebook o Apple.Nella console Firebase: crea un nuovo utente autenticato con password nella scheda Sicurezza > Autenticazione > Utenti.
Recupera il profilo di un utente
Per recuperare 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:
I flussi
authStateChanges,idTokenChangeseuserChanges: i tuoi listener riceveranno l'oggettoUsercorrente onullse 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, perché verrà creato un nuovo abbonamento a ogni ricompilazione. Se devi aggiornare l'interfaccia utente 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 che l'albero dei widget venga ricompilato automaticamente quando lo stato di autenticazione dell'utente cambia.
L'oggetto
UserCredentialrestituito dai metodi di autenticazione (signIn-) : l'oggettoUserCredentialha una proprietàusercon l'oggettoUsercorrente:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);La proprietà
currentUserdell'istanzaFirebaseAuth: se hai la certezza che l' utente abbia eseguito l'accesso, puoi accedere all'oggettoUserdalla proprietàcurrentUser:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }La proprietà
currentUserpuò esserenullper due motivi:- L'utente non ha eseguito l'accesso.
- L'oggetto di autenticazione non ha completato l'inizializzazione. Se utilizzi un listener per tenere traccia dello stato di accesso dell'utente, non devi gestire questo caso.
Recupera le informazioni del profilo specifiche del provider di un utente
Per recuperare 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;
}
}
Aggiorna 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");
Imposta 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");
Invia 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 Sicurezza > Autenticazione > Modelli scheda della Firebase console. Consulta Modelli di email in Centro assistenza Firebase.
È anche possibile passare lo stato tramite un URL continuo per reindirizzare l'utente all'app quando invii un'email di verifica.
Inoltre, puoi localizzare l'email di verifica aggiornando il codice lingua nell'istanza di autenticazione prima di inviare l'email. Ad esempio:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
Imposta la password di un utente
Puoi impostare la password di un utente con il metodo updatePassword(). Ad esempio:
await user?.updatePassword(newPassword);
Invia un'email di reimpostazione 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 Sicurezza > Autenticazione > Modelli scheda della Firebase console. Consulta Modelli di email in Centro assistenza Firebase.
È anche possibile passare lo stato tramite un URL continuo per reindirizzare l'utente all'app quando invii un'email di reimpostazione password.
Inoltre, puoi localizzare l'email di reimpostazione password aggiornando il codice 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.
Elimina un utente
Puoi eliminare un account utente con il metodo delete(). Ad esempio:
await user?.delete();
Puoi anche eliminare gli utenti nella console Firebase nella scheda Sicurezza > Autenticazione > Utenti.
Esegui di nuovo 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 generata un'eccezione FirebaseAuthException con il codice requires-recent-login.
In questo caso, esegui di nuovo l'autenticazione dell'utente recuperando nuove credenziali di accesso e passandole a reauthenticate. Ad esempio:
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
Importa account utente
Puoi importare gli account utente da un file nel tuo progetto Firebase utilizzando il
comando auth:importdella CLI Firebase. Ad esempio:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14