Cloudrail - Codage

Créez un nouveau fichier pour votre code serveur dans le dossier créé et ajoutez ce qui suit pour importer et configurer Express et CloudRail -

javascript
const express = require("express");
const cloudrail = require("cloudrail-si");
const app = express();
cloudrail.Settings.setKey("[CloudRail license key]");

Maintenant, nous continuons en écrivant une fonction qui instanciera les services que nous voulons utiliser pour la connexion sociale -

javascript
function makeService(name, redirectReceiver) {
   let service;
   switch (name) {
      case "twitter":
         service = new cloudrail.services.Twitter(
            redirectReceiver,
            "[Twitter Client ID]",
            "[Twitter Client Secret]",
            "http://localhost:12345/auth/redirect/twitter"
         );
         break;
      case "facebook":
         service = new cloudrail.services.Facebook(
            redirectReceiver,
            "[Facebook Client ID]",
            "[Facebook Client Secret]",
            "http://localhost:12345/auth/redirect/facebook",
            "state"
         );
         break;
      // More services from the Profile interface can be added here, 
      //the services above are just examples
      default: throw new Error("Unrecognized service");
   }
   return service;
}

Nous avons besoin d'un moyen de garder une trace des identités des utilisateurs. Cela se fait normalement dans une base de données mais pour garder ce tutoriel court, nous utiliserons un objet qui agit comme unpseudo-database.

Toutes ses données sont conservées en mémoire et sont donc perdues au redémarrage du serveur -

javascript
const users = {
   records: {}
};
users.find = (id) ⇒ {
   return users.records[id];
};
users.save = (id, data) ⇒ {
   users.records[id] = data;
};

Ensuite, nous enregistrons le point de terminaison du serveur qui gérera le début du flux de connexion sociale -

javascript
app.get("/auth/start/:serviceName", (req, res) ⇒ {
   let serviceName = req.params["serviceName"];
   
   let redirectReceiver = (url, state, callback) ⇒ {
      res.redirect(url);
   };
   let service = makeService(serviceName, redirectReceiver);
   service.login();
});

Le service avec lequel nous avons démarré la connexion sociale sera redirigé vers notre serveur et nous devons gérer cette redirection.

Après avoir obtenu un identifiant unique pour l'utilisateur, nous vérifions si nous avons déjà vu cet utilisateur. Si oui, alors nous le saluons avec son nom. Sinon, nous obtenons le nom du réseau social et enregistrons un nouvel utilisateur -

javascript
app.get("/auth/redirect/:serviceName", (req, res) ⇒ {
   let serviceName = req.params["serviceName"];
   
   let redirectReceiver = (url, state, callback) ⇒ {
      callback(undefined, "http://bla.com" + req.url); 
      // The callback expects a complete URL but only the query matters
   };
	let service = makeService(serviceName, redirectReceiver);
   service.getIdentifier((err, identifier) ⇒ {
      if (err) res.status(500).send(err);
      let user = users.find(identifier);
      
      if (user) {
         res.send("Welcome back " + user.name);
      } else {
         service.getFullName((err, name) ⇒ {
            if (err) res.status(500).send(err);
            users.save(identifier, {
               name: name
            });
            res.send("Welcome greenhorn!");
         });
      }
   });
});

Enfin, nous faisons écouter le serveur sur le port 12345 -

javascript
app.listen(12345);

Nous pouvons maintenant démarrer l'application et la tester dans notre navigateur local.

Si vous accédez à http://localhost:12345/auth/start/facebook vous allez démarrer le flux de connexion Facebook.

Si vous accédez à http://localhost:12345/auth/start/twitter vous allez démarrer le flux de connexion Twitter.

Après vous être connecté au service et accordé l'accès, vous verrez "Welcome greenhorn!" si vous le faites pour la première fois et "Bienvenue à nouveau [votre nom]" lors de visites consécutives.

Pour l'intégrer dans un site Web réel, vous devez, par exemple, y inclure les logos du fournisseur de services et créer un lien entre les logos et les URL respectives.

De plus, la pseudo-base de données doit être remplacée par une vraie. Et voilà, connexion sociale pour jusqu'à 9 fournisseurs différents!