Nutzer mit GitHub anmelden

In diesem Artikel erfahren Sie, wie Sie Nutzer mit Identity Platform in GitHub anmelden.

Hinweise

In dieser Anleitung wird davon ausgegangen, dass Sie Identity Platform bereits aktiviert und eine einfache Webanwendung erstellt haben, die mit HTML und JavaScript geschrieben wurde. Weitere Informationen dazu finden Sie in der Kurzanleitung.

GitHub als Anbieter konfigurieren

So konfigurieren Sie GitHub als Identitätsanbieter:

  1. Rufen Sie in der Google Cloud Console die Seite Identitätsanbieter auf.

    Zur Seite „Identitätsanbieter“

  2. Klicken Sie auf Anbieter hinzufügen.

  3. Wählen Sie GitHub aus der Liste aus.

  4. Geben Sie Ihre Client-ID und Ihren Client-Secret auf GitHub ein. Wenn Sie noch keine ID und kein Secret haben, können Sie sich auf der Seite GitHub-Anwendungen welche besorgen.

  5. Konfigurieren Sie den unter GitHub konfigurieren aufgeführten URI als gültigen OAuth-Weiterleitungs-URI für Ihre GitHub-Anwendung.

  6. Klicken Sie unter Autorisierte Domains auf Domain hinzufügen, um die Domains Ihrer Anwendung zu registrieren. Für Entwicklungszwecke ist localhost bereits standardmäßig aktiviert.

  7. Klicken Sie unter Anwendung konfigurieren auf Einrichtungsdetails. Kopieren Sie das Snippet in den Code Ihrer Anwendung, um das Identity Platform Client SDK zu initialisieren.

  8. Klicken Sie auf Speichern.

Nutzer mit dem Client SDK anmelden

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

    Web version 9

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

    Web version 8

    var provider = new firebase.auth.GithubAuthProvider();
  1. Optional: Fügen Sie OAuth-Bereiche hinzu. Die Bereiche legen fest, welche Daten Sie von GitHub anfordern. Für sensiblere Daten sind möglicherweise spezielle Bereiche erforderlich. In der Dokumentation des Anbieters können Sie ermitteln, welche Bereiche Ihre Anwendung benötigt.

    Web version 9

    provider.addScope('repo');

    Web version 8

    provider.addScope('repo');
  1. Optional: Lokalisieren Sie den Authentifizierungsablauf. Sie können eine Sprache angeben oder die Standardsprache des Geräts verwenden:

    Web version 9

    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 version 8

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  2. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an. Sie gelten speziell für GitHub und werden meist verwendet, um die Authentifizierung anzupassen. Sie können keine von OAuth oder Identity Platform reservierten Parameter übergeben.

Web version 9

provider.setCustomParameters({
  'allow_signup': 'false'
});

Web version 8

provider.setCustomParameters({
  'allow_signup': 'false'
});
  1. Verwenden Sie das GitHub-Anbieterobjekt, um den Nutzer anzumelden. 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 signInWithPopup() auf, um ein Pop-up-Fenster einzublenden:

    Web version 9

    import { getAuth, signInWithPopup, GithubAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // This gives you a GitHub Access Token. You can use it to access the GitHub API.
        const credential = GithubAuthProvider.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 = GithubAuthProvider.credentialFromError(error);
        // ...
      });

    Web version 8

    firebase
      .auth()
      .signInWithPopup(provider)
      .then((result) => {
        /** @type {firebase.auth.OAuthCredential} */
        var credential = result.credential;
    
        // This gives you a GitHub Access Token. You can use it to access the GitHub 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;
        // ...
      });

    Wenn Sie die Seite weiterleiten möchten, rufen Sie zuerst signInWithRedirect() auf.

    Folgen Sie den Best Practices zur Verwendung von signInWithRedirect, linkWithRedirect oder reauthenticateWithRedirect.

    Web version 9

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

    Web version 8

    firebase.auth().signInWithRedirect(provider);

    Rufen Sie dann das GitHub-Token beim Laden der Seite ab, indem Sie: getRedirectResult() aufrufen:

    Web version 9

    import { getAuth, getRedirectResult, GithubAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        const credential = GithubAuthProvider.credentialFromResult(result);
        if (credential) {
          // This gives you a GitHub Access Token. You can use it to access the GitHub API.
          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 = GithubAuthProvider.credentialFromError(error);
        // ...
      });

    Web version 8

    firebase.auth()
      .getRedirectResult()
      .then((result) => {
        if (result.credential) {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
    
          // This gives you a GitHub Access Token. You can use it to access the GitHub 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;
        // ...
      });

Sobald Sie ein Zugriffstoken haben, können Sie es zum Aufrufen der GitHub API verwenden. Beispiel:

REST

curl -H "Authorization: Bearer [TOKEN]" https://api.github.com/gists/starred

Nutzer manuell anmelden

Wenn Sie das Client SDK nicht verwenden möchten, können Sie den Anmeldevorgang auch manuell ausführen:

  1. Binden Sie die GitHuble-Authentifizierung in Ihre Anwendung ein. Folgen Sie dazu den Schritten in der Entwicklerdokumentation.

  2. Melden Sie sich in GitHub an. Verwenden Sie dazu den Ablauf, den Sie im vorherigen Schritt implementiert haben.

  3. Tauschen Sie das Token, das Sie von GitHub erhalten, gegen Anmeldedaten für Identity Platform ein:

    Web version 9

    import { GithubAuthProvider } from "firebase/auth";
    
    const credential = GithubAuthProvider.credential(token);

    Web version 8

    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Verwenden Sie die Anmeldedaten, um den Nutzer mit Identity Platform anzumelden:

    Web version 9

    import { getAuth, signInWithCredential } from "firebase/auth";
    
    // Sign in with the credential from the user.
    const auth = getAuth();
    signInWithCredential(auth, credential)
      .then((result) => {
        // Signed in
        // ...
      })
      .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;
        // ...
      });

    Web version 8

    // Sign in with the credential from the user.
    firebase.auth()
      .signInWithCredential(credential)
      .then((result) => {
        // Signed in
        // ...
      })
      .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.email;
        // ...
      });

Nächste Schritte