Mehrere Authentifizierungsanbieter mit einem Konto über C++ verknüpfen

Sie können Nutzern die Anmeldung in Ihrer App über mehrere Authentifizierungsanbieter ermöglichen, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Nutzer sind unabhängig vom Authentifizierungsanbieter, den sie für die Anmeldung verwendet haben, anhand derselben Firebase-Nutzer-ID identifizierbar. Ein Nutzer, der sich beispielsweise mit einem Passwort angemeldet hat, kann ein Google-Konto verknüpfen und sich künftig mit einer der beiden Methoden anmelden. Alternativ kann ein anonymer Nutzer ein Facebook-Konto verknüpfen und sich später mit Facebook anmelden, um Ihre App weiter zu verwenden.

Hinweis

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

So verknüpfen Sie Anmeldedaten eines Authentifizierungsanbieters mit einem bestehenden Nutzerkonto:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer Methode an.
  2. Schließen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter ab, bis Sie eine der firebase::auth::Auth::SignInWithCredential-Methoden aufrufen. Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E‑Mail-Adresse und das Passwort des Nutzers ab.
  3. Rufen Sie ein firebase::auth::Credential für den neuen Authentifizierungsanbieter ab:

    Google Log-in
    firebase::auth::Credential credential =
        firebase::auth::GoogleAuthProvider::GetCredential(google_id_token,
                                                          nullptr);
    Facebook-Anmeldung
    firebase::auth::Credential credential =
        firebase::auth::FacebookAuthProvider::GetCredential(access_token);
    Anmeldung mit E-Mail-Adresse und Passwort
    firebase::auth::Credential credential =
        firebase::auth::EmailAuthProvider::GetCredential(email, password);
  4. Übergeben Sie das firebase::auth::Credential-Objekt an die Methode LinkWithCredential des angemeldeten Nutzers:

    // 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);

    Der Aufruf von LinkWithCredential schlägt fehl, wenn die Anmeldedaten bereits mit einem anderen Nutzerkonto verknüpft sind. In diesem Fall müssen Sie das Zusammenführen der Konten und der zugehörigen Daten entsprechend Ihrer App vornehmen:

    // 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;
    }

Wenn der Aufruf von LinkWithCredential erfolgreich ist, kann sich der Nutzer jetzt mit einem beliebigen verknüpften Authentifizierungsanbieter anmelden und auf dieselben Firebase-Daten zugreifen.

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

Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben möchten, übergeben Sie die Anbieter-ID an die Methode Unlink. Sie können die Anbieter-IDs der mit einem Nutzer verknüpften Authentifizierungsanbieter abrufen, indem Sie ProviderData aufrufen.

// 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);

Fehlerbehebung

Wenn beim Verknüpfen mehrerer Konten Fehler auftreten, finden Sie hier weitere Informationen.