Verknüpfen Sie mehrere Authentifizierungsanbieter mit einem Konto mit C++

Sie können Benutzern erlauben, sich mit mehreren Authentifizierungsanbietern bei Ihrer App anzumelden, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen. Nutzer können unabhängig vom Authentifizierungsanbieter, mit dem sie sich angemeldet haben, mit derselben Firebase-Nutzer-ID identifiziert werden. Beispielsweise kann ein Nutzer, der sich mit einem Passwort angemeldet hat, ein Google-Konto verknüpfen und sich in Zukunft mit einer der beiden Methoden anmelden. Oder ein anonymer Benutzer kann ein Facebook-Konto verknüpfen und sich später bei Facebook anmelden, um Ihre App weiter zu verwenden.

Bevor Sie beginnen

Fügen Sie Ihrer App Unterstützung für zwei oder mehr Authentifizierungsanbieter (möglicherweise einschließlich anonymer Authentifizierung) hinzu.

So verknüpfen Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto:

  1. Melden Sie den Benutzer mit einem beliebigen Authentifizierungsanbieter oder -methode an.
  2. Füllen Sie das Anmelde-Flow für den neuen Authentifizierungsanbieter bis zu, aber nicht einschließlich, ruft einer der firebase::auth::Auth::SignInWithCredential Methoden. Rufen Sie beispielsweise das Google-ID-Token des Benutzers, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort ab.
  3. Holen Sie sich ein firebase::auth::Credential für die neuen Authentifizierungsanbieter:

    Google Sign-In
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    
    Facebook Anmelden
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    
    E - Mail-Passwort-Anmeldung
    firebase::auth::Credential credential =
        firebase::auth::EmailAuthProvider::GetCredential(email, password);
    
  4. Übergeben Sie die firebase::auth::Credential - Objekt der angemeldeten Nutzer des LinkWithCredential Methode:

    // Link the new credential to the currently active user.
    firebase::auth::User* current_user = auth->current_user();
    firebase::Future<firebase::auth::User*> result =
        current_user->LinkWithCredential(credential);
    

    Der Aufruf von LinkWithCredential wird scheitern , wenn die Anmeldeinformationen bereits auf ein anderes Benutzerkonto verknüpft sind. In dieser Situation müssen Sie die Konten und zugehörigen Daten entsprechend Ihrer App zusammenführen:

    // 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::User*> result =
        auth->SignInWithCredential(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;
    }
    

Wenn der Aufruf von LinkWithCredential erfolgreich ist , kann der Benutzer melden Sie sich jetzt verlinkten Authentifizierungsanbieter und Zugriff auf die gleichen Daten in Firebase verwendet.

Sie können die Verknüpfung eines Authentifizierungsanbieters mit einem Konto aufheben, sodass sich der Benutzer nicht mehr bei diesem Anbieter anmelden kann.

Um einen Auth - Anbieter von einem Benutzerkonto zu entkoppeln, den Anbieter - ID an den Pass Unlink Methode. Sie können den Provider - IDs des Auth - Anbieters an einen Benutzer durch den Aufruf verknüpft bekommen ProviderData .

// Unlink the sign-in provider from the currently active user.
firebase::auth::User* current_user = auth->current_user();
firebase::Future<firebase::auth::User*> result =
    current_user->Unlink(providerId);