Cloudrail - Mã hóa
Tạo tệp mới cho mã máy chủ của bạn trong thư mục đã tạo và thêm tệp sau để nhập và thiết lập Express và CloudRail -
javascript
const express = require("express");
const cloudrail = require("cloudrail-si");
const app = express();
cloudrail.Settings.setKey("[CloudRail license key]");
Bây giờ, chúng tôi tiếp tục bằng cách viết một hàm sẽ khởi tạo các dịch vụ mà chúng tôi muốn sử dụng để đăng nhập mạng xã hội -
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;
}
Chúng tôi cần một cách để theo dõi danh tính người dùng. Điều này thường được thực hiện trong cơ sở dữ liệu nhưng để giữ cho hướng dẫn này ngắn gọn, chúng tôi sẽ sử dụng một đối tượng hoạt động như mộtpseudo-database.
Tất cả dữ liệu của nó được lưu trong bộ nhớ và do đó sẽ bị mất khi máy chủ khởi động lại -
javascript
const users = {
records: {}
};
users.find = (id) ⇒ {
return users.records[id];
};
users.save = (id, data) ⇒ {
users.records[id] = data;
};
Sau đó, chúng tôi đăng ký điểm cuối máy chủ sẽ xử lý việc bắt đầu luồng đăng nhập xã hội -
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();
});
Dịch vụ mà chúng tôi đã bắt đầu đăng nhập xã hội sẽ chuyển hướng đến máy chủ của chúng tôi và chúng tôi cần xử lý chuyển hướng này.
Sau khi nhận được số nhận dạng duy nhất cho người dùng, chúng tôi kiểm tra xem chúng tôi đã từng gặp người dùng này chưa. Nếu có, thì chúng tôi chào anh ta bằng tên của anh ta. Nếu không, chúng tôi lấy tên từ mạng xã hội và lưu một người dùng mới -
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!");
});
}
});
});
Cuối cùng, chúng tôi có máy chủ lắng nghe trên cổng 12345 -
javascript
app.listen(12345);
Bây giờ chúng tôi có thể khởi động ứng dụng và kiểm tra nó trong trình duyệt cục bộ của chúng tôi.
Nếu bạn điều hướng đến http://localhost:12345/auth/start/facebook bạn sẽ bắt đầu quy trình đăng nhập Facebook.
Nếu bạn điều hướng đến http://localhost:12345/auth/start/twitter bạn sẽ bắt đầu luồng đăng nhập Twitter.
Sau khi đăng nhập với dịch vụ và cấp quyền truy cập, bạn sẽ thấy thông báo "Chào mừng greenhorn!" nếu bạn làm điều đó lần đầu tiên và "Chào mừng bạn trở lại [tên của bạn]" trong những lần truy cập liên tiếp.
Ví dụ: để tích hợp nó vào một trang web thực tế, bạn sẽ bao gồm các biểu trưng của nhà cung cấp dịch vụ và làm cho các biểu trưng liên kết đến các URL tương ứng.
Bên cạnh đó, cơ sở dữ liệu giả nên được thay thế bằng cơ sở dữ liệu thực. Và bạn đã thực hiện, đăng nhập mạng xã hội cho tối đa 9 nhà cung cấp khác nhau!