Puoi consentire agli utenti di accedere alla tua app utilizzando più provider di autenticazione collegando le credenziali del provider di autenticazione a un account utente esistente. Gli utenti sono identificabili tramite lo stesso ID utente Firebase, indipendentemente dal il provider di autenticazione utilizzato per accedere. Ad esempio, un utente che ha eseguito l'accesso con una password può collegare un Account Google e accedere con entrambi i metodi in futuro. In alternativa, un utente anonimo può collegare un account Facebook e poi accedere con Facebook per continuare a utilizzare la tua app.
Prima di iniziare
Aggiungi alla tua app il supporto di due o più provider di autenticazione (eventualmente inclusa l'autenticazione anonima).
Collegare le credenziali del provider di autenticazione a un account utente
Per collegare le credenziali del provider di autenticazione a un account utente esistente:
Accedi all'utente utilizzando qualsiasi metodo o provider di autenticazione.
Completa il flusso di accesso per il nuovo provider di autenticazione fino al giorno, ma non inclusa la chiamata a uno dei metodi
signInWith
-. Ad esempio, recuperare il token ID Google, il token di accesso di Facebook o l'email e la password dell'utente.Ottieni un oggetto
Credential
per il nuovo provider di autenticazione:// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
Trasmetti l'oggetto
Credential
al valorelinkWithCredential()
dell'utente che ha eseguito l'accesso :try { final userCredential = await FirebaseAuth.instance.currentUser ?.linkWithCredential(credential); } on FirebaseAuthException catch (e) { switch (e.code) { case "provider-already-linked": print("The provider has already been linked to the user."); break; case "invalid-credential": print("The provider's credential is not valid."); break; case "credential-already-in-use": print("The account corresponding to the credential already exists, " "or is already linked to a Firebase User."); break; // See the API reference for the full list of error codes. default: print("Unknown error."); } ```
Se la chiamata al numero linkWithCredential()
ha esito positivo, l'utente può ora accedere utilizzando
a qualsiasi provider di autenticazione collegato e accedere agli stessi dati Firebase.
Scollegare un provider di autenticazione da un account utente
È possibile scollegare un provider di autenticazione da un account, in modo che l'utente non possa non acceda più con quel fornitore.
Per scollegare un provider di autenticazione da un account utente, passa l'ID provider al
unlink()
. Puoi ottenere gli ID provider dei provider di autenticazione collegati a un utente dalla proprietà providerData
dell'oggetto User
.
try {
await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "no-such-provider":
print("The user isn't linked to the provider or the provider "
"doesn't exist.");
break;
default:
print("Unknown error.");
}
}