Cloudrail-coding
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;
}
ユーザーIDを追跡する方法が必要です。 これは通常データベースで行われますが、このチュートリアルを短くするために、*疑似データベース*として機能するオブジェクトを使用します。
そのデータはすべてメモリに保持されるため、サーバーの再起動時に失われます-
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!」と表示されます。あなたが初めてそれをし、連続訪問で「[あなたの名前]へようこそ」と言った場合。
これを実際のWebサイトに統合するには、たとえば、サービスプロバイダーのロゴをそこに含め、ロゴをそれぞれのURLにリンクします。
また、擬似データベースは実際のデータベースに置き換える必要があります。 そして、そこに行く、最大9種類のプロバイダーのソーシャルログイン!