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
หลังจากเข้าสู่ระบบด้วยบริการและให้สิทธิ์การเข้าถึงคุณจะเห็น "Welcome greenhorn!" หากคุณทำครั้งแรกและ "ยินดีต้อนรับกลับ [ชื่อของคุณ]" เมื่อเข้าชมติดต่อกัน
ในการรวมเข้ากับเว็บไซต์จริงตัวอย่างเช่นคุณต้องรวมโลโก้ของผู้ให้บริการไว้ที่นั่นและทำให้โลโก้เชื่อมโยงไปยัง URL ที่เกี่ยวข้อง
นอกจากนี้ฐานข้อมูลหลอกควรถูกแทนที่ด้วยของจริง เอาล่ะเข้าสู่ระบบโซเชียลสำหรับผู้ให้บริการมากถึง 9 ราย!