Mit Google mit JavaScript authentifizieren

Sie können Ihren Nutzern erlauben, sich mit ihren Google-Konten bei Firebase zu authentifizieren. Sie können entweder das Firebase SDK verwenden, um den Anmeldevorgang über Google auszuführen, oder den Anmeldevorgang manuell mit der „Über Google anmelden“-Bibliothek ausführen und das resultierende ID-Token an Firebase übergeben.

Hinweis

  1. Firebase zu Ihrem JavaScript-Projekt hinzufügen
  2. Aktivieren Sie Google als Anmeldemethode in der Firebase-Konsole:
    1. Öffnen Sie in der Firebase-Konsole den Bereich Auth (Authentifizierung).
    2. Aktivieren Sie auf dem Tab Anmeldemethode die Anmeldemethode Google und klicken Sie auf Speichern.

Anmeldevorgang mit dem Firebase SDK verarbeiten

Wenn Sie eine Web-App entwickeln, ist das Firebase JavaScript SDK die einfachste Möglichkeit, Nutzer mit ihren Google-Konten über Firebase zu authentifizieren. Wenn Sie einen Nutzer in Node.js oder einer anderen Nicht-Browser-Umgebung authentifizieren möchten, müssen Sie den Anmeldevorgang manuell ausführen.

So verarbeiten Sie den Anmeldevorgang mit dem Firebase JavaScript SDK:

  1. Erstellen Sie eine Instanz des Google-Anbieter-Objekts:

    Web

    import { GoogleAuthProvider } from "firebase/auth";
    
    const provider = new GoogleAuthProvider();

    Web

    var provider = new firebase.auth.GoogleAuthProvider();
  2. Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche an, die Sie vom Authentifizierungsanbieter anfordern möchten. Rufen Sie addScope auf, um einen Bereich hinzuzufügen. Beispiel:

    Web

    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');

    Web

    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
    Weitere Informationen finden Sie in der Dokumentation zum Authentifizierungsanbieter.
  3. Optional: Wenn Sie den OAuth-Ablauf des Bereitstellers in die bevorzugte Sprache des Nutzers lokalisieren möchten, ohne die entsprechenden benutzerdefinierten OAuth-Parameter explizit zu übergeben, aktualisieren Sie den Sprachcode in der Auth-Instanz, bevor Sie den OAuth-Ablauf starten. Beispiel:

    Web

    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // auth.useDeviceLanguage();

    Web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  4. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Anbieterparameter an, die mit der OAuth-Anfrage gesendet werden sollen. Wenn Sie einen benutzerdefinierten Parameter hinzufügen möchten, rufen Sie setCustomParameters für den initialisierten Anbieter mit einem Objekt auf, das den Schlüssel (wie in der Dokumentation des OAuth-Anbieters angegeben) und den entsprechenden Wert enthält. Beispiel:

    Web

    provider.setCustomParameters({
      'login_hint': 'user@example.com'
    });

    Web

    provider.setCustomParameters({
      'login_hint': 'user@example.com'
    });
    Reservierte erforderliche OAuth-Parameter sind nicht zulässig und werden ignoriert. Weitere Informationen finden Sie in der Referenz zum Authentifizierungsanbieter.
  5. Mit Firebase über das Google-Anbieterobjekt authentifizieren Sie können Ihre Nutzer auffordern, sich mit ihren Google-Konten anzumelden. Dazu können Sie entweder ein Pop-up-Fenster öffnen oder zur Anmeldeseite weiterleiten. Die Weiterleitungsmethode wird auf Mobilgeräten bevorzugt.
    • Rufen Sie signInWithPopup auf, um sich über ein Pop-up-Fenster anzumelden:

      Web

      import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access the Google API.
          const credential = GoogleAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          // The signed-in user info.
          const user = result.user;
          // IdP data available using getAdditionalUserInfo(result)
          // ...
        }).catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.customData.email;
          // The AuthCredential type that was used.
          const credential = GoogleAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a Google Access Token. You can use it to access the Google API.
          var token = credential.accessToken;
          // The signed-in user info.
          var user = result.user;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
        }).catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
          // ...
        });
      Sie können auch das OAuth-Token des Google-Anbieters abrufen, mit dem zusätzliche Daten über die Google APIs abgerufen werden können.

      Hier können Sie auch Fehler abfangen und behandeln. Eine Liste der Fehlercodes finden Sie in der Auth-Referenzdokumentation.

    • Rufen Sie signInWithRedirect auf, um sich anzumelden, indem Sie auf die Anmeldeseite weiterleiten: Halten Sie sich bei der Verwendung von `signInWithRedirect` an die Best Practices.

      Web

      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, provider);

      Web

      firebase.auth().signInWithRedirect(provider);
      Anschließend können Sie das OAuth-Token des Google-Anbieters abrufen, indem Sie getRedirectResult aufrufen, wenn Ihre Seite geladen wird:

      Web

      import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access Google APIs.
          const credential = GoogleAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
      
          // The signed-in user info.
          const user = result.user;
          // IdP data available using getAdditionalUserInfo(result)
          // ...
        }).catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.customData.email;
          // The AuthCredential type that was used.
          const credential = GoogleAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Google Access Token. You can use it to access the Google API.
            var token = credential.accessToken;
            // ...
          }
          // The signed-in user info.
          var user = result.user;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
        }).catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
          // ...
        });
      Hier können Sie auch Fehler abfangen und behandeln. Eine Liste der Fehlercodes finden Sie in der Auth-Referenzdokumentation.

Mit Firebase in einer Chrome-Erweiterung authentifizieren

Wenn Sie eine Chrome-Erweiterungs-App entwickeln, lesen Sie die Anleitung zu Offscreen-Dokumenten.

Nächste Schritte

Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.

  • In Ihren Apps ist es am besten, den Autorisierungsstatus des Nutzers zu ermitteln, indem Sie einen Observer für das Auth-Objekt festlegen. Anschließend können Sie die grundlegenden Profilinformationen des Nutzers aus dem User-Objekt abrufen. Weitere Informationen finden Sie unter Nutzer verwalten.

  • In Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.

Rufen Sie signOut auf, um einen Nutzer abzumelden:

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});