Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika. Użytkownicy są identyfikowani za pomocą tego samego identyfikatora użytkownika Firebase niezależnie od dostawcy uwierzytelniania, którego użyli do zalogowania się. Użytkownik, który zalogował się za pomocą hasła, może na przykład połączyć konto Google i w przyszłości logować się za pomocą dowolnej z tych metod. Użytkownik anonimowy może też połączyć konto na Facebooku, a potem zalogować się za pomocą Facebooka, aby nadal korzystać z Twojej aplikacji.
Zanim zaczniesz
Dodaj do aplikacji obsługę co najmniej 2 dostawców uwierzytelniania (może to być uwierzytelnianie anonimowe).
KlasaFirebaseAuth
jest bramą dla wszystkich wywołań interfejsu API.
Jest on dostępny za pomocą 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 za pomocą dowolnego dostawcy lub metody uwierzytelniania.
- Dokończ proces logowania u nowego dostawcy uwierzytelniania, ale nie wywołuj żadnej z metod
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
. Możesz na przykład uzyskać token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło. Uzyskaj
Logowanie przez GoogleFirebase.Auth.Credential
dla nowego dostawcy uwierzytelniania: Logowanie przez FacebookaFirebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
Logowanie za pomocą adresu e-mail i hasłaFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Firebase.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
nie powiedzie się, 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 w sposób odpowiedni dla Twojej 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 może się zalogować za pomocą 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ł się już logować za jego pomocą.
Aby odłączyć dostawcę uwierzytelniania od konta użytkownika, przekaż identyfikator dostawcy do metody UnlinkAsync
. Identyfikatory dostawców usług uwierzytelniania połączonych z użytkownikiem możesz uzyskać, 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); });
Rozwiązywanie problemów
Jeśli podczas próby połączenia kilku kont wystąpią błędy, zapoznaj się z dokumentacją dotyczącą zweryfikowanych adresów e-mail.