Catch up on everthing we announced at this year's Firebase Summit. Learn more

Authentification à l'aide de GitHub avec JavaScript

Vous pouvez laisser vos utilisateurs s'authentifier auprès de Firebase à l'aide de leurs comptes GitHub en intégrant l'authentification GitHub dans votre application. Vous pouvez intégrer l'authentification GitHub soit en utilisant le SDK Firebase pour effectuer le flux de connexion, soit en exécutant le flux GitHub OAuth 2.0 manuellement et en transmettant le jeton d'accès résultant à Firebase.

Avant que tu commences

  1. Ajouter Firebase à votre projet JavaScript .
  2. Dans la console Firebase , ouvrez la section Auth.
  3. Sur l'onglet Connexion méthode, activez le fournisseur GitHub.
  4. Ajoutez l'ID client et le client secret de la console développeur de ce fournisseur à la configuration du fournisseur:
    1. Enregistrez votre application comme une application de développeur sur GitHub et obtenir votre application de OAuth 2.0 ID client et secret client.
    2. Assurez - vous que votre Firebase OAuth URI de redirection (par exemple my-app-12345.firebaseapp.com/__/auth/handler ) est définie comme l' URL de votre rappel Autorisation dans la page des paramètres de votre application sur votre la configuration de l' application GitHub .
  5. Cliquez sur Enregistrer.

Gérer le flux de connexion avec le SDK Firebase

Si vous créez une application Web, le moyen le plus simple d'authentifier vos utilisateurs avec Firebase à l'aide de leurs comptes GitHub consiste à gérer le flux de connexion avec le SDK JavaScript Firebase. (Si vous souhaitez authentifier un utilisateur dans Node.js ou dans un autre environnement sans navigateur, vous devez gérer le flux de connexion manuellement.)

Pour gérer le flux de connexion avec le SDK JavaScript Firebase, procédez comme suit :

  1. Créez une instance de l'objet fournisseur GitHub :

    Web version 9

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

    Web version 8

    var provider = new firebase.auth.GithubAuthProvider();
  2. Facultatif: Spécifiez champs OAuth 2.0 supplémentaires que vous voulez demande du fournisseur d'authentification. Pour ajouter un champ, appelez addScope . Par exemple:

    Web version 9

    provider.addScope('repo');

    Web version 8

    provider.addScope('repo');
    Consultez la documentation du fournisseur d'authentification .
  3. Facultatif: spécifiez des paramètres supplémentaires du fournisseur de OAuth personnalisé que vous souhaitez envoyer à la demande OAuth. Pour ajouter un paramètre personnalisé, appelez setCustomParameters sur le fournisseur initialisés avec un objet contenant la clé tel que spécifié par la documentation du fournisseur de OAuth et la valeur correspondante. Par exemple:

    Web version 9

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

    Web version 8

    provider.setCustomParameters({
      'allow_signup': 'false'
    });
    Les paramètres OAuth requis réservés ne sont pas autorisés et seront ignorés. Voir la référence fournisseur d'authentification pour plus de détails.
  4. Authentifiez-vous auprès de Firebase à l'aide de l'objet fournisseur GitHub. Vous pouvez inviter vos utilisateurs à se connecter avec leurs comptes GitHub soit en ouvrant une fenêtre contextuelle, soit en les redirigeant vers la page de connexion. La méthode de redirection est préférée sur les appareils mobiles.
    • Pour vous connecter avec une fenêtre pop-up, appel signInWithPopup :

      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;
          // ...
        }).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;
          // 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;
          // ...
        }).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;
          // ...
        });
      Notez également que vous pouvez récupérer le jeton OAuth du fournisseur GitHub qui peut être utilisé pour récupérer des données supplémentaires à l'aide des API GitHub.

      C'est également là que vous pouvez détecter et gérer les erreurs. Pour une liste des codes d'erreur ont un regard sur les Auth Référence Docs .

    • Pour vous connecter en redirigeant la page de connexion, appelez signInWithRedirect :

      Web version 9

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

      Web version 8

      firebase.auth().signInWithRedirect(provider);
      Ensuite, vous pouvez également récupérer le jeton OAuth du fournisseur GitHub en appelant getRedirectResult lorsque votre page se charge:

      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;
        }).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;
          // 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;
        }).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;
          // ...
        });
      C'est également là que vous pouvez détecter et gérer les erreurs. Pour une liste des codes d'erreur ont un regard sur les Auth Référence Docs .

Gérer le flux de connexion manuellement

Vous pouvez également vous authentifier auprès de Firebase à l'aide d'un compte GitHub en gérant le flux de connexion en appelant les points de terminaison GitHub OAuth 2.0 :

  1. Intégrer l' authentification GitHub dans votre application en suivant la documentation du développeur . À la fin du flux de connexion GitHub, vous recevrez un jeton d'accès OAuth 2.0.
  2. Si vous devez vous connecter à une application Node.js, envoyez le jeton d'accès OAuth à l'application Node.js.
  3. Une fois qu'un utilisateur s'est connecté avec succès à GitHub, échangez le jeton d'accès OAuth 2.0 contre des identifiants Firebase :

    Web version 9

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

    Web version 8

    var credential = firebase.auth.GithubAuthProvider.credential(token);
  4. Authentifiez-vous auprès de Firebase à l'aide des identifiants Firebase :

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

S'authentifier avec Firebase dans une extension Chrome

Si vous créez une application d'extension Chrome, vous devez ajouter votre ID d'extension Chrome :

  1. Ouvrez votre projet dans la console Firebase .
  2. Dans la section Authentification, ouvrez la page de connexion de la méthode.
  3. Ajouter un URI comme suit à la liste des domaines autorisés:
    chrome-extension://CHROME_EXTENSION_ID

Seules les opérations popup ( signInWithPopup , linkWithPopup et reauthenticateWithPopup ) sont disponibles pour des extensions Chrome, comme des extensions Chrome ne peuvent pas utiliser les redirections HTTP. Vous devez appeler ces méthodes à partir d'un script de page d'arrière-plan plutôt que d'une fenêtre contextuelle d'action du navigateur, car la fenêtre contextuelle d'authentification annulera la fenêtre contextuelle d'action du navigateur. Les méthodes pop - up ne peuvent être utilisés dans les extensions en utilisant Manifest V2 . La nouvelle Manifest V3 permet uniquement des scripts de base sous la forme des travailleurs de services qui ne peuvent pas effectuer les opérations de pop - up du tout.

Dans votre marque de fichier manifeste d'extension Chrome vous que vous ajoutez l' https://apis.google.com URL à la content_security_policy allowlist.

Prochaines étapes

Une fois qu'un utilisateur se connecte pour la première fois, un nouveau compte d'utilisateur est créé et lié aux informations d'identification, c'est-à-dire le nom d'utilisateur et le mot de passe, le numéro de téléphone ou les informations du fournisseur d'autorisation, avec lesquelles l'utilisateur s'est connecté. Ce nouveau compte est stocké dans le cadre de votre projet Firebase et peut être utilisé pour identifier un utilisateur dans chaque application de votre projet, quel que soit le mode de connexion de l'utilisateur.

  • Dans vos applications, la méthode recommandée pour connaître l'état de votre auth utilisateur de définir un observateur sur le Auth objet. Vous pouvez obtenir des informations sur le profil de base de l'utilisateur de l' User objet. Voir Gérer les utilisateurs .

  • Dans votre base de données et en temps réel Firebase Cloud Storage Les règles de auth sécurité , vous pouvez obtenir la signature dans ID d'utilisateur unique de l' utilisateur de la auth variable et l' utiliser pour contrôler les données d' un accès utilisateur peut.

Vous pouvez permettre aux utilisateurs de se connecter à votre application à l' aide des fournisseurs d'authentification multiples en reliant les informations d' identification de fournisseur auth à un compte d'utilisateur existant.

Pour vous déconnecter un utilisateur, appelez signOut :

Web version 9

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

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

Web version 8

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