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を追跡する方法が必要です。これは通常データベースで行われますが、このチュートリアルを短くするために、として機能するオブジェクトを使用します。pseudo-database

そのすべてのデータはメモリに保持されるため、サーバーの再起動時に失われます-

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のログインフローを開始します。

サービスにログインしてアクセスを許可すると、「Welcomegreenhorn!」と表示されます。初めて行う場合は、連続して「おかえりなさい[あなたの名前]」と言ってください。

実際のWebサイトに統合するには、たとえば、サービスプロバイダーのロゴをそこに含め、ロゴをそれぞれのURLにリンクさせます。

また、疑似データベースは実際のデータベースに置き換える必要があります。これで、最大9つの異なるプロバイダーのソーシャルログインが完了しました。