Możesz zezwolić użytkownikom na logowanie się do Twojej aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika. Użytkowników można zidentyfikować za pomocą tego samego identyfikatora użytkownika Firebase niezależnie od dostawcy uwierzytelniania, którego użyli do zalogowania. Na przykład użytkownik, który zalogował się za pomocą hasła, może połączyć konto Google i zalogować się za pomocą dowolnej metody w przyszłości. Lub anonimowy użytkownik może połączyć konto na Facebooku, a następnie później zalogować się na Facebooku, aby nadal korzystać z Twojej aplikacji.
Zanim zaczniesz
Dodaj do swojej aplikacji obsługę co najmniej dwóch dostawców uwierzytelniania (być może łącznie z uwierzytelnianiem anonimowym).
KlasaFirebaseAuth
jest bramą dla wszystkich wywołań API. Jest dostępny przez FirebaseAuth.DefaultInstance .Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Połącz poświadczenia dostawcy uwierzytelniania z kontem użytkownika
Aby połączyć poświadczenia dostawcy autoryzacji z istniejącym kontem użytkownika:
- Zaloguj użytkownika przy użyciu dowolnego dostawcy lub metody uwierzytelniania.
- Ukończ proces logowania dla nowego dostawcy uwierzytelniania do, ale nie w tym, wywołania jednej z metod
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
. Na przykład uzyskaj token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło. Uzyskaj
Logowanie do GoogleFirebase.Auth.Credential
dla nowego dostawcy uwierzytelniania:Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
Logowanie do FacebookaFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
E-mail-hasło logowaniaFirebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
Przekaż obiekt
Firebase.Auth.Credential
do metodyLinkWithCredentialAsync
zalogowanego użytkownika:auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Wywołanie
LinkWithCredentialAsync
zakończy się niepowodzeniem, jeśli poświadczenia są już połączone z innym kontem użytkownika. W tej sytuacji musisz zająć się łączeniem kont i powiązanych danych odpowiednio do swojej aplikacji:// Gather data for the currently signed in User. string currentUserId = auth.CurrentUser.UserId; string currentEmail = auth.CurrentUser.Email; string currentDisplayName = auth.CurrentUser.DisplayName; System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl; // Sign in with the new credentials. auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); // TODO: Merge app specific details using the newUser and values from the // previous user, saved above. });
Jeśli wywołanie LinkWithCredentialAsync
powiedzie się, użytkownik może teraz zalogować się przy użyciu dowolnego połączonego dostawcy uwierzytelniania i uzyskać dostęp do tych samych danych Firebase.
Odłącz dostawcę uwierzytelniania od konta użytkownika
Możesz odłączyć dostawcę uwierzytelniania od konta, aby użytkownik nie mógł już logować się u tego dostawcy.
Aby odłączyć dostawcę uwierzytelniania od konta użytkownika, przekaż identyfikator dostawcy do metody UnlinkAsync
. Możesz uzyskać identyfikatory dostawców dostawców uwierzytelniania połączonych z użytkownikiem, wywołując ProviderData
.
// Unlink the sign-in provider from the currently active user. // providerIdString is a string identifying a provider, // retrieved via FirebaseAuth.FetchProvidersForEmail(). auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UnlinkAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UnlinkAsync encountered an error: " + task.Exception); return; } // The user has been unlinked from the provider. Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})", result.User.DisplayName, result.User.UserId); });