- Cloudrail 教程
- Cloudrail - 主頁
- Cloudrail - 概述
- Cloudrail - Android
- Cloudrail - Java
- Cloudrail - Node.js
- Cloudrail - IOS
- Cloudrail - 社交登入
- Cloudrail - 設定
- Cloudrail - 編碼
- Cloudrail 有用資源
- Cloudrail - 快速指南
- Cloudrail - 有用資源
- Cloudrail - 討論
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]",
"https://:12345/auth/redirect/twitter"
);
break;
case "facebook":
service = new cloudrail.services.Facebook(
redirectReceiver,
"[Facebook Client ID]",
"[Facebook Client Secret]",
"https://: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);
我們現在可以啟動應用程式並在本地瀏覽器中對其進行測試。
如果您導航到https://:12345/auth/start/facebook,您將啟動 Facebook 登入流程。
如果您導航到https://:12345/auth/start/twitter,您將啟動 Twitter 登入流程。
使用該服務登入並授予訪問許可權後,如果您是第一次登入,您將看到“歡迎新手!”,在後續訪問中則會看到“歡迎回來 [您的姓名]”。
要將其整合到實際網站中,例如,您可以在那裡包含服務提供商的徽標並將徽標連結到相應的 URL。
此外,偽資料庫應替換為真正的資料庫。就是這樣,最多可為 9 個不同的提供商進行社交登入!
廣告