- 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://127.0.0.1:12345/auth/redirect/twitter" ); break; case "facebook": service = new cloudrail.services.Facebook( redirectReceiver, "[Facebook Client ID]", "[Facebook Client Secret]", "https://127.0.0.1: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://127.0.0.1:12345/auth/start/facebook,您将启动 Facebook 登录流程。
如果您导航到https://127.0.0.1:12345/auth/start/twitter,您将启动 Twitter 登录流程。
使用该服务登录并授予访问权限后,如果您是第一次登录,您将看到“欢迎新手!”,在后续访问中则会看到“欢迎回来 [您的姓名]”。
要将其集成到实际网站中,例如,您可以在那里包含服务提供商的徽标并将徽标链接到相应的 URL。
此外,伪数据库应替换为真正的数据库。就是这样,最多可为 9 个不同的提供商进行社交登录!
广告