Учебники

Cloudrail — Кодирование

Создайте новый файл для кода своего сервера в созданной папке и добавьте следующее для импорта и настройки Express и CloudRail

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

Теперь мы продолжим писать функцию, которая будет создавать экземпляры сервисов, которые мы хотим использовать для входа в социальную сеть.

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

Нам нужен способ отслеживать личность пользователя. Обычно это делается в базе данных, но для краткости этого урока мы будем использовать объект, который действует как псевдо-база данных .

Все его данные хранятся в памяти и, таким образом, теряются при перезапуске сервера.

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

После этого мы регистрируем конечную точку сервера, которая будет обрабатывать начало потока входа в систему —

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

Служба, с которой мы запустили социальный вход, будет перенаправлять на наш сервер, и нам нужно обработать это перенаправление.

После получения уникального идентификатора для пользователя мы проверяем, видели ли мы этого пользователя раньше. Если да, то мы приветствуем его с его именем. Если нет, мы получаем имя из социальной сети и сохраняем нового пользователя —

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

Наконец, у нас сервер прослушивает порт 12345 —

javascript
app.listen(12345);

Теперь мы можем запустить приложение и протестировать его в нашем локальном браузере.

Если вы перейдете по адресу http: // localhost: 12345 / auth / start / facebook, вы запустите поток входа в Facebook.

Если вы перейдете по адресу http: // localhost: 12345 / auth / start / twitter, вы запустите поток входа в систему Twitter.

После входа в систему и предоставления доступа вы увидите «Добро пожаловать, зеленый рог!» если вы делаете это в первый раз, и «Добро пожаловать [ваше имя]» при последующих посещениях.

Чтобы интегрировать его в реальный веб-сайт, вы, например, должны добавить туда логотипы поставщика услуг и сделать ссылки на соответствующие URL-адреса.

Кроме того, псевдобазу следует заменить реальной. И все, социальная регистрация для 9 различных провайдеров!