Cloudrail - 編碼



在建立的資料夾中為您的伺服器程式碼新建一個檔案,並新增以下內容以匯入和設定ExpressCloudRail

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 個不同的提供商進行社交登入!

廣告
© . All rights reserved.