Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Verknüpfen Sie mehrere Authentifizierungsanbieter mithilfe von JavaScript mit einem Konto

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. Benutzer können unabhängig vom Authentifizierungsanbieter, mit dem sie sich angemeldet haben, anhand derselben Firebase-Benutzer-ID identifiziert werden. Beispielsweise kann ein Benutzer, der sich mit einem Kennwort angemeldet hat, ein Google-Konto verknüpfen und sich künftig mit beiden Methoden anmelden. Oder ein anonymer Benutzer kann ein Facebook-Konto verknüpfen und sich später bei Facebook anmelden, um Ihre App weiterhin 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 Anmeldeinformationen eines Authentifizierungsanbieters wie Google oder Facebook mit einem vorhandenen Benutzerkonto:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Authentifizierungsmethode beim Benutzer an.
  2. AuthProvider Sie das AuthProvider Objekt ab, das dem Anbieter entspricht, den Sie mit dem Benutzerkonto verknüpfen möchten. Beispiele:
    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. Fordern Sie den Benutzer auf, sich bei dem Anbieter anzumelden, den Sie verknüpfen möchten. Sie können Ihre Benutzer zur Anmeldung auffordern, indem Sie entweder ein Popup-Fenster öffnen oder zur Anmeldeseite des Anbieters umleiten. Die Umleitungsmethode wird auf Mobilgeräten bevorzugt.
    • Um sich mit einem Popup-Fenster linkWithPopup , rufen Sie linkWithPopup :
      auth.currentUser.linkWithPopup(provider).then(function(result) {
        // Accounts successfully linked.
        var credential = result.credential;
        var user = result.user;
        // ...
      }).catch(function(error) {
        // Handle Errors here.
        // ...
      });
    • Rufen Sie linkWithRedirect , um sich linkWithRedirect , linkWithRedirect des Anbieters linkWithRedirect :
      auth.currentUser.linkWithRedirect(provider)
        .then(/* ... */)
        .catch(/* ... */);
      Nachdem sich der Benutzer angemeldet hat, wird er zurück zu Ihrer Seite weitergeleitet. Anschließend können Sie das getRedirectResult indem getRedirectResult beim getRedirectResult Ihrer Seite getRedirectResult aufrufen:
      auth.getRedirectResult().then(function(result) {
        if (result.credential) {
          // Accounts successfully linked.
          var credential = result.credential;
          var user = result.user;
          // ...
        }
      }).catch(function(error) {
        // Handle Errors here.
        // ...
      });
    Wenn der Benutzer erfolgreich angemeldet ist, wird das Benutzerkonto beim Anbieter mit dem Benutzerkonto in Ihrem Firebase-Projekt verknüpft.

    Die Kontoverknüpfung schlägt fehl, wenn die Anmeldeinformationen bereits mit einem anderen Benutzerkonto verknüpft sind. In dieser Situation müssen Sie das Zusammenführen der Konten und der zugehörigen Daten entsprechend Ihrer App behandeln:

    // The implementation of how you store your user data depends on your application
    var repo = new MyUserDataRepo();
    
    // Get reference to the currently signed-in user
    var prevUser = auth.currentUser;
    
    // Get the data which you will want to merge. This should be done now
    // while the app is still signed in as this user.
    var prevUserData = repo.get(prevUser);
    
    // Delete the user's data now, we will restore it if the merge fails
    repo.delete(prevUser);
    
    // Sign in user with the account you want to link to
    auth.signInWithCredential(newCredential).then(function(result) {
      console.log("Sign In Success", result);
      var currentUser = result.user;
      var currentUserData = repo.get(currentUser);
    
      // Merge prevUser and currentUser data stored in Firebase.
      // Note: How you handle this is specific to your application
      var mergedData = repo.merge(prevUserData, currentUserData);
    
      return prevUser.linkWithCredential(result.credential)
        .then(function(linkResult) {
          // Sign in with the newly linked credential
          return auth.signInWithCredential(linkResult.credential);
        })
        .then(function(signInResult) {
          // Save the merged data to the new user
          repo.set(signInResult.user, mergedData);
        });
    }).catch(function(error) {
      // If there are errors we want to undo the data merge/deletion
      console.log("Sign In Error", error);
      repo.set(prevUser, prevUserData);
      repo.set(currentUser, currentUserData);
    });

So fügen Sie einem vorhandenen Benutzerkonto E-Mail-Adresse und Kennwortanmeldeinformationen hinzu:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Authentifizierungsmethode beim Benutzer an.
  2. Fordern Sie den Benutzer zur Eingabe einer E-Mail-Adresse und eines neuen Passworts auf.
  3. Erstellen Sie ein AuthCredential Objekt mit der E-Mail-Adresse und dem Kennwort:
    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  4. AuthCredential das AuthCredential Objekt an die linkWithCredential Methode des angemeldeten Benutzers:

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

    Der Aufruf von linkWithCredential fehl, wenn die Anmeldeinformationen bereits mit einem anderen Benutzerkonto verknüpft sind. In dieser Situation müssen Sie die für Ihre App geeigneten Konten und zugehörigen Daten zusammenführen (siehe Beispiel oben).

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

Um die Verknüpfung eines Authentifizierungsanbieters von einem Benutzerkonto aufzuheben, übergeben Sie die Anbieter-ID an die Methode zum unlink der unlink . Sie können die Anbieter-IDs der mit einem Benutzer verknüpften Authentifizierungsanbieter über die Eigenschaft providerData abrufen.

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