Cloudrail - Codificación

Cree un nuevo archivo para su código de servidor en la carpeta creada y agregue lo siguiente para importar y configurar Express y CloudRail -

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

Ahora, continuamos escribiendo una función que instanciará los servicios que queremos usar para el inicio de sesión social:

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;
}

Necesitamos una forma de realizar un seguimiento de las identidades de los usuarios. Esto normalmente se hace en una base de datos, pero para que este tutorial sea breve, usaremos un objeto que actúa comopseudo-database.

Todos sus datos se guardan en la memoria y, por lo tanto, se pierden cuando se reinicia el servidor.

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

Después, registramos el punto final del servidor que manejará el inicio del flujo de inicio de sesión social:

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();
});

El servicio con el que hemos iniciado el inicio de sesión social redirigirá a nuestro servidor y debemos manejar esta redirección.

Después de obtener un identificador único para el usuario, verificamos si hemos visto a este usuario antes. Si es así, lo saludamos con su nombre. Si no, obtenemos el nombre de la red social y guardamos un nuevo usuario -

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!");
         });
      }
   });
});

Finalmente, tenemos el servidor escuchando en el puerto 12345 -

javascript
app.listen(12345);

Ahora podemos iniciar la aplicación y probarla en nuestro navegador local.

Si navega a http://localhost:12345/auth/start/facebook iniciará el proceso de inicio de sesión de Facebook.

Si navega a http://localhost:12345/auth/start/twitter iniciará el flujo de inicio de sesión de Twitter.

Después de iniciar sesión con el servicio y otorgar acceso, verá "¡Bienvenido novato!" si lo hace por primera vez y "Bienvenido de nuevo [su nombre]" en visitas consecutivas.

Para integrarlo en un sitio web real, debería, por ejemplo, incluir allí los logotipos del proveedor de servicios y hacer que los logotipos se vinculen a las respectivas URL.

Además, la pseudo-base de datos debería ser reemplazada por una real. ¡Y listo, inicio de sesión social para hasta 9 proveedores diferentes!