Procéder à la connexion des utilisateurs avec Twitter

Ce document explique comment utiliser Identity Platform pour connecter des utilisateurs avec Twitter.

Avant de commencer

Ce tutoriel suppose que vous avez déjà activé Identity Platform et que vous disposez d'une application Web de base écrite en HTML et JavaScript. Pour savoir comment, consultez le guide de démarrage rapide.

Configurer Twitter en tant que fournisseur

Pour configurer Twitter en tant que fournisseur d'identité :

  1. Accédez à la page Fournisseurs d'identité dans la console Google Cloud.

    Accéder à la page "Fournisseurs d'identité"

  2. Cliquez sur Ajouter un fournisseur.

  3. Sélectionnez Twitter dans la liste.

  4. Saisissez votre ID d'application et votre code secret de l'application Twitter. Si vous ne possédez pas encore d'ID et de secret, vous pouvez en obtenir un sur la page Applications Twitter.

  5. Configurez l'URI indiqué sous Configurer Twitter en tant qu'URI de redirection OAuth valide pour votre application Twitter. Si vous avez configuré un domaine personnalisé dans Identity Platform, mettez à jour l'URI de redirection dans la configuration de votre application Twitter pour qu'il utilise le domaine personnalisé au lieu du domaine par défaut. Par exemple, remplacez https://myproject.firebaseapp.com/__/auth/handler par https://auth.myownpersonaldomain.com/__/auth/handler.

  6. Enregistrez les domaines de votre application en cliquant sur Ajouter un domaine sous Domaines autorisés. À des fins de développement, localhost est déjà activé par défaut.

  7. Sous Configurer votre application, cliquez sur Informations sur la configuration. Copiez l'extrait dans le code de votre application pour initialiser le SDK client Identity Platform.

  8. Cliquez sur Enregistrer.

Procéder à la connexion des utilisateurs avec le SDK client

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

    Version Web 9

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

    Version Web 8

    var provider = new firebase.auth.TwitterAuthProvider();
  1. Facultatif : Localisez le flux d'authentification. Vous pouvez spécifier un langage ou utiliser le langage par défaut de l'appareil :

    Version Web 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();

    Version Web 8

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  2. Facultatif : spécifiez des paramètres OAuth personnalisés supplémentaires. Ces paramètres sont spécifiques à Twitter et sont généralement utilisés pour personnaliser l'authentification. Vous ne pouvez pas transmettre des paramètres réservés par OAuth ou Identity Platform.

Version Web 9

provider.setCustomParameters({
  'lang': 'es'
});

Version Web 8

provider.setCustomParameters({
  'lang': 'es'
});
  1. Utilisez l'objet du fournisseur Twitter pour vous connecter à l'utilisateur. Vous pouvez soit ouvrir une fenêtre pop-up, soit rediriger la page actuelle. La redirection est plus facile pour les utilisateurs d'appareils mobiles.

    Pour afficher une fenêtre pop-up, appelez signInWithPopup() :

    Version Web 9

    import { getAuth, signInWithPopup, TwitterAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
        // You can use these server side with your app's credentials to access the Twitter API.
        const credential = TwitterAuthProvider.credentialFromResult(result);
        const token = credential.accessToken;
        const secret = credential.secret;
    
        // 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 = TwitterAuthProvider.credentialFromError(error);
        // ...
      });

    Version Web 8

    firebase
      .auth()
      .signInWithPopup(provider)
      .then((result) => {
        /** @type {firebase.auth.OAuthCredential} */
        var credential = result.credential;
    
        // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
        // You can use these server side with your app's credentials to access the Twitter API.
        var token = credential.accessToken;
        var secret = credential.secret;
    
        // 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;
        // ...
      });

    Pour rediriger la page, appelez d'abord signInWithRedirect().

    Suivez les bonnes pratiques lorsque vous utilisez signInWithRedirect, linkWithRedirect ou reauthenticateWithRedirect.

    Version Web 9

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

    Version Web 8

    firebase.auth().signInWithRedirect(provider);

    Ensuite, récupérez le jeton Twitter en appelant getRedirectResult() lorsque votre page se charge :

    Version Web 9

    import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
        // You can use these server side with your app's credentials to access the Twitter API.
        const credential = TwitterAuthProvider.credentialFromResult(result);
        const token = credential.accessToken;
        const secret = credential.secret;
        // ...
    
        // 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 = TwitterAuthProvider.credentialFromError(error);
        // ...
      });

    Version Web 8

    firebase.auth()
      .getRedirectResult()
      .then((result) => {
        if (result.credential) {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
    
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          var token = credential.accessToken;
          var secret = credential.secret;
          // ...
        }
    
        // 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;
        // ...
      });

Une fois que vous disposez d'un jeton d'accès, vous pouvez l'utiliser pour appeler l'API Twitter. Exemple :

REST

curl --request POST
  --url 'https://api.twitter.com/1.1/statuses/update.json?status=Hello%20world'
  --header 'authorization: OAuth oauth_consumer_key="CONSUMER_API_KEY",
  oauth_nonce="OAUTH_NONCE", oauth_signature="OAUTH_SIGNATURE",
  oauth_signature_method="HMAC-SHA1", oauth_timestamp="OAUTH_TIMESTAMP",
  oauth_token="ACCESS_TOKEN", oauth_version="1.0"'

Procéder à la connexion manuelle des utilisateurs

Si vous ne souhaitez pas utiliser le SDK Client, vous pouvez également gérer le flux de connexion manuellement :

  1. Intégrez l'authentification Twitter à votre application en suivant les étapes décrites dans sa documentation pour les développeurs.

  2. Connectez l'utilisateur avec Twitter à l'aide du flux que vous avez mis en œuvre à l'étape précédente.

  3. Remplacez le jeton reçu de Twitter pour obtenir un identifiant Identity Platform :

    Version Web 9

    import { TwitterAuthProvider } from "firebase/auth";
    
    const credential = TwitterAuthProvider.credential(accessToken, secret);

    Version Web 8

    var credential = firebase.auth.TwitterAuthProvider.credential(accessToken, secret);
  4. Utilisez l'identifiant pour connecter l'utilisateur avec Identity Platform :

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

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

Étapes suivantes