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;
}
Нам нужен способ отслеживать личности пользователей. Обычно это делается в базе данных, но для краткости этого руководства мы будем использовать объект, который действует какpseudo-database.
Все его данные хранятся в памяти и, таким образом, теряются при перезапуске сервера -
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 различных провайдеров!