Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielokrotnego uwierzytelniania. przez połączenie danych 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 parametru dostawcy uwierzytelniania, którego użyli do logowania. Na przykład: użytkownik, który zalogował się hasła, możesz połączyć konto Google i zalogować się za pomocą dowolnej z tych metod w przyszłości. Anonimowy użytkownik może też połączyć konto na Facebooku, a później się zalogować z Facebookiem, aby dalej korzystać z aplikacji.
Zanim zaczniesz
Dodanie obsługi co najmniej 2 dostawców uwierzytelniania (możesz uwzględnić anonimowego uwierzytelniania).
Łą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.
- Przeprowadź proces logowania w przypadku nowego dostawcy uwierzytelniania do, ale nie
na przykład przez wywołanie jednej z metod
firebase::auth::Auth::SignInWithCredential
. Na przykład pobierz 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(google_id_token, nullptr);
Logowanie do Facebookafirebase::auth::Credential credential = firebase::auth::FacebookAuthProvider::GetCredential(access_token);
Logowanie się przy użyciu adresu e-mail i hasłafirebase::auth::Credential credential = firebase::auth::EmailAuthProvider::GetCredential(email, password);
Przekaż obiekt
firebase::auth::Credential
do folderu zalogowanego użytkownika MetodaLinkWithCredential
:// Link the new credential to the currently active user. firebase::auth::User current_user = auth->current_user(); firebase::Future<firebase::auth::AuthResult> result = current_user.LinkWithCredential(credential);
Wywołanie
LinkWithCredential
zakończy się niepowodzeniem, jeśli dane logowania są już połączone z innym kontem użytkownika. W takiej sytuacji musisz użyć Połączenie kont i powiązanych z nimi danych odpowiednio do potrzeb aplikacji:// Gather data for the currently signed in User. firebase::auth::User current_user = auth->current_user(); std::string current_email = current_user.email(); std::string current_provider_id = current_user.provider_id(); std::string current_display_name = current_user.display_name(); std::string current_photo_url = current_user.photo_url(); // Sign in with the new credentials. firebase::Future<firebase::auth::AuthResult> result = auth->SignInAndRetrieveDataWithCredential(credential); // To keep example simple, wait on the current thread until call completes. while (result.status() == firebase::kFutureStatusPending) { Wait(100); } // The new User is now active. if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::User* new_user = *result.result(); // Merge new_user with the user in details. // ... (void)new_user; }
Jeśli wywołanie LinkWithCredential
się powiedzie, użytkownik może się teraz zalogować za pomocą
dowolnego połączonego dostawcy uwierzytelniania i mieć 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ł logować się dłużej u tego dostawcy.
Aby odłączyć dostawcę uwierzytelniania od konta użytkownika, przekaż identyfikator dostawcy do
Metoda Unlink
. Możesz uzyskać identyfikatory dostawców uwierzytelniania
powiązane z użytkownikiem przez wywołanie
ProviderData
// Unlink the sign-in provider from the currently active user. firebase::auth::User current_user = auth->current_user(); firebase::Future<firebase::auth::AuthResult> result = current_user.Unlink(providerId);