Создайте новый файл для кода своего сервера в созданной папке и добавьте следующее для импорта и настройки 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 различных провайдеров!