Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Mehrere Anbieter mit einem Konto verknüpfen

In diesem Dokument wird gezeigt, wie Sie mehrere Anbieter mit einem einzigen Identity Platform-Konto verknüpfen.

Identity Platform verwendet eine eindeutige ID, um Nutzer zu identifizieren. Auf diese Weise können sich Nutzer mit unterschiedlichen Anbietern im selben Konto anmelden. Beispielsweise kann ein Nutzer, der sich ursprünglich mit einer Telefonnummer registriert hat, später sein Google-Konto verknüpfen und sich dann auf eine der beiden Arten anmelden.

Hinweis

Fügen Sie Ihrer Anwendung zwei oder mehr Identitätsanbieter hinzu.

Kontoverknüpfung aktivieren oder deaktivieren

Mit der Kontoverknüpfungseinstellung wird festgelegt, wie Identity Platform die Nutzer behandelt, die versuchen, sich mit derselben E-Mail-Adresse über verschiedene Anbieter anzumelden.

  • Konten mit derselben E-Mail-Adresse verknüpfen: Identity Platform gibt einen Fehler aus, wenn ein Nutzer versucht, sich mit einer E-Mail-Adresse anzumelden, die bereits verwendet wird. Ihre Anwendung kann diesen Fehler erkennen und den neuen Anbieter mit seinem bestehenden Konto verknüpfen.

  • Mehrere Konten für jeden Identitätsanbieter erstellen: Jedes Mal, wenn sich ein Nutzer bei einem anderen Anbieter anmeldet, wird ein neues Identity Platform-Nutzerkonto erstellt.

So wählen Sie eine Einstellung aus:

  1. Rufen Sie in der Cloud Console die Identity Platform-Seite Einstellungen auf.

    Zur Seite "Einstellungen"

  2. Wählen Sie unter Kontoverknüpfung eine Einstellung aus.

  3. Klicken Sie auf Speichern.

Anmeldedaten eines föderierten Anbieters verknüpfen

So verknüpfen Sie die Anmeldedaten eines föderierten Anbieters:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer Methode an.

  2. Rufen Sie das Anbieterobjekt ab, das dem Anbieter entspricht, den Sie mit dem Nutzerkonto verknüpfen möchten. Beispiel:

    JavaScript

    var googleProvider = new firebase.auth.GoogleAuthProvider();
    var facebookProvider = new firebase.auth.FacebookAuthProvider();
    var twitterProvider = new firebase.auth.TwitterAuthProvider();
    var githubProvider = new firebase.auth.GithubAuthProvider();
  3. Bitten Sie den Nutzer, sich mit dem Anbieter anzumelden, den Sie verknüpfen möchten. Sie können entweder ein Pop-up-Fenster öffnen oder die aktuelle Seite weiterleiten. Für Nutzer von Mobilgeräten ist die Weiterleitung einfacher.

    Rufen Sie linkWithPopup() auf, um ein Pop-up-Fenster einzublenden:

    JavaScript

    auth.currentUser.linkWithPopup(provider).then((result) => {
      // Accounts successfully linked.
      var credential = result.credential;
      var user = result.user;
      // ...
    }).catch((error) => {
      // Handle Errors here.
      // ...
    });

    Rufen Sie zum Weiterleiten der Seite zuerst linkWithRedirect() auf:

    JavaScript

    auth.currentUser.linkWithRedirect(provider)
      .then(/* ... */)
      .catch(/* ... */);

    Nachdem der Nutzer sich angemeldet hat, wird er zu Ihrer Anwendung zurückgeleitet. Anschließend können Sie das Anmeldeergebnis durch Aufrufen von getRedirectResult() abrufen:

    JavaScript

    auth.getRedirectResult().then((result) => {
      if (result.credential) {
        // Accounts successfully linked.
        var credential = result.credential;
        var user = result.user;
        // ...
      }
    }).catch((error) => {
      // Handle Errors here.
      // ...
    });

Das Nutzerkonto des föderierten Anbieters ist jetzt mit seinem Identity Platform-Konto verknüpft und kann sich über den Anbieter anmelden.

E-Mail-Adresse und Passwort als Anmeldedaten verknüpfen

So fügen Sie einem vorhandenen Nutzerkonto eine E-Mail-Adresse und ein Passwort hinzu:

  1. Melden Sie sich mit einem beliebigen Identitätsanbieter oder einer beliebigen Methode an.

  2. Fordern Sie den Nutzer zur Eingabe einer E-Mail-Adresse und eines Passworts auf.

  3. Erstellen Sie ein AuthCredential-Objekt mit der E-Mail-Adresse und dem Passwort:

    JavaScript

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  4. Übergeben Sie das AuthCredential-Objekt an die Methode linkWithCredential() des angemeldeten Nutzers:

    JavaScript

    auth.currentUser.linkWithCredential(credential)
      .then((usercred) => {
        var user = usercred.user;
        console.log("Account linking success", user);
      }).catch((error) => {
        console.log("Account linking error", error);
      });

Die E-Mail-Adresse und das Passwort sind jetzt mit dem Identity Platform-Konto des Nutzers verknüpft und können sich damit anmelden.

Fehler "account-exists-with-different-credential" beheben

Wenn Sie die Einstellung Konten verknüpfen, die dieselbe E-Mail-Adresse verwenden aktiviert haben, löst Identity Platform einen Fehler aus, wenn sich ein Nutzer bei einem Anbieter mit einer E-Mail-Adresse anmeldet, die bereits mit einem vorhandenen Konto verknüpft ist.

Um diesen Fehler zu beheben, bitten Sie den Nutzer, sich mit einem vorhandenen Konto anzumelden. Rufen Sie dann linkWithCredential(), linkWithPopup() oder linkWithRedirect() auf, um den neuen Anbieter mit seinem Konto zu verknüpfen.

Das folgende Beispiel zeigt, wie dieser Fehler behoben wird, wenn ein Nutzer versucht, sich mit Facebook anzumelden:

JavaScript

// User tries to sign in with Facebook.
auth.signInWithPopup(new firebase.auth.FacebookAuthProvider()).catch(err => {
  // User's email already exists.
  if (err.code === 'auth/account-exists-with-different-credential') {
    // The pending Facebook credential.
    var pendingCred = err.credential;
    // The provider account's email address.
    var email = err.email;
    // Get the sign-in methods for this email.
    auth.fetchSignInMethodsForEmail(email).then(methods => {
      // If the user has several sign-in methods, the first method
      // in the list will be the "recommended" method to use.
      if (methods[0] === 'password') {
        // TODO: Ask the user for their password.
        // In real scenario, you should handle this asynchronously.
        var password = promptUserForPassword();
        auth.signInWithEmailAndPassword(email, password).then(result => {
          return result.user.linkWithCredential(pendingCred);
        }).then(() => {
          // Facebook account successfully linked to the existing user.
          goToApp();
        });
        return;
      }
      // All other cases are external providers.
      // Construct provider object for that provider.
      // TODO: Implement getProviderForProviderId.
      var provider = getProviderForProviderId(methods[0]);
      // At this point, you should let the user know that they already have an
      // account with a different provider, and validate they want to sign in
      // with the new provider.
      // Note: Browsers usually block popups triggered asynchronously, so in
      // real app, you should ask the user to click on a "Continue" button
      // that will trigger signInWithPopup().
      auth.signInWithPopup(provider).then(result => {
        // Note: Identity Platform doesn't control the provider's sign-in
        // flow, so it's possible for the user to sign in with an account
        // with a different email from the first one.

        // Link the Facebook credential. We have access to the pending
        // credential, so we can directly call the link method.
        result.user.linkWithCredential(pendingCred).then(usercred => {
          // Success.
          goToApp();
        });
      });
    });
  }
});

Weiterleitungen sind ähnlich wie Pop-ups, es sei denn, Sie speichern die ausstehenden Anmeldedaten zwischen den Seitenweiterleitungen (z. B. mit Sitzungsspeicher).

Beachten Sie, dass einige Anbieter, z. B. Google und Microsoft, sowohl als E-Mail- als auch als Anbieter von sozialen Identitäten dienen. E-Mail-Anbieter gelten als vertrauenswürdig für alle Adressen, die mit ihrer gehosteten E-Mail-Domain zusammenhängen. Das bedeutet, dass sich ein Nutzer, der sich mit einer E-Mail-Adresse anmeldet, die vom selben Anbieter gehostet wird, nie diesen Fehler auslöst. Er kann sich z. B. mit einer @gmail.com-E-Mail bei Google anmelden oder bei Microsoft mit einer @live.com-oder @outlook.com-E-Mail).

Konten manuell zusammenführen

Wenn ein Nutzer versucht, sich mit Anmeldedaten eines anderen Nutzers, der bereits mit demselben Anbieter verknüpft ist, anzumelden, schlagen die integrierten Methoden des Client-SDK zur Kontoverknüpfung fehl. In diesem Fall müssen Sie die Konten manuell zusammenführen und dann das zweite Konto löschen. Beispiel:

JavaScript

// Sign in first account.
const result1 = await auth.signInWithCredential(cred1);
const user1 = result1.user;
// Try to link a credential that belongs to an existing account
try {
  await user1.linkWithCredential(cred2);
} catch (error) {
  // cred2 already exists so an error is thrown.
  const result2 = await auth.signInWithCredential(error.credential);
  const user2 = result2.user;
  // Merge the data.
  mergeData(user1, user2);
  // Delete one of the accounts, and try again.
  await user2.delete();
  // Linking now will work.
  await user1.linkWithCredential(result2.credential);
}

Sie können die Verknüpfung zwischen einem Anbieter und dem Konto eines Nutzers aufheben. Der Nutzer kann sich nicht mehr bei diesem Anbieter authentifizieren.

Wenn Sie die Verknüpfung eines Anbieters aufheben möchten, übergeben Sie die Anbieter-ID an die Methode unlink() des Nutzers. Sie erhalten die ID für das Attribut providerData.

JavaScript

user.unlink(providerId).then(() => {
  // Auth provider unlinked from account
  // ...
}).catch((error) => {
  // An error happened
  // ...
});

Nächste Schritte