Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu różnych dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika. Użytkowników można zidentyfikować na podstawie tego samego identyfikatora użytkownika Firebase niezależnie od dostawcy uwierzytelniania, którego użyli do logowania. Na przykład użytkownik, który zalogował się za pomocą hasła, może w przyszłości połączyć konto Google i zalogować się za pomocą dowolnej z tych metod. Anonimowy użytkownik może też połączyć konto na Facebooku, a potem zalogować się przez Facebooka, aby dalej korzystać z aplikacji.
Zanim zaczniesz
Dodaj do swojej aplikacji obsługę co najmniej 2 dostawców uwierzytelniania (z uwzględnieniem uwierzytelniania anonimowego).
KlasaFirebaseAuth
jest bramą dla wszystkich wywołań interfejsu API.
Jest dostępna przez FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Łączenie danych logowania dostawcy uwierzytelniania z kontem użytkownika
Aby połączyć dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika:
- Zaloguj użytkownika przy użyciu dowolnego dostawcy lub metody uwierzytelniania.
- Wykonaj proces logowania dla nowego dostawcy uwierzytelniania, aż do wywołania jednej z metod
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
, lecz nie włączając tej metody. Możesz na przykład uzyskać token identyfikatora Google użytkownika, token dostępu Facebooka lub adres e-mail i hasło. Pobierz
Logowanie przez GoogleFirebase.Auth.Credential
dla nowego dostawcy uwierzytelniania:Firebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
Logowanie przez FacebookaFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Logowanie się za pomocą adresu e-mailFirebase.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 dane logowania są już połączone z innym kontem użytkownika. W takiej sytuacji musisz połączyć konta i powiązane z nimi dane odpowiednio do potrzeb 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
się powiedzie, użytkownik będzie mógł zalogować się przy użyciu dowolnego połączonego dostawcy uwierzytelniania i uzyskać dostęp do tych samych danych Firebase.
Odłączanie dostawcy uwierzytelniania od konta użytkownika
Możesz odłączyć dostawcę uwierzytelniania od konta, aby użytkownik nie mógł już logować się przez niego.
Aby odłączyć dostawcę uwierzytelniania od konta użytkownika, przekaż identyfikator dostawcy do metody UnlinkAsync
. Aby uzyskać identyfikatory dostawców uwierzytelniania połączonych z użytkownikiem, wywołaj metodę
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); });