Cloudrail - Kodlama

Oluşturulan klasörde sunucu kodunuz için yeni bir dosya oluşturun ve içe aktarmak ve kurmak için aşağıdakileri ekleyin Express ve CloudRail -

javascript
const express = require("express");
const cloudrail = require("cloudrail-si");
const app = express();
cloudrail.Settings.setKey("[CloudRail license key]");

Şimdi, sosyal oturum açma için kullanmak istediğimiz hizmetleri somutlaştıracak bir işlev yazmaya devam ediyoruz -

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;
}

Kullanıcı kimliklerini takip etmenin bir yolunu bulmalıyız. Bu normalde bir veritabanında yapılır, ancak bu öğreticiyi kısa tutmak için, birpseudo-database.

Tüm verileri bellekte tutulur ve bu nedenle sunucu yeniden başladığında kaybolur -

javascript
const users = {
   records: {}
};
users.find = (id) ⇒ {
   return users.records[id];
};
users.save = (id, data) ⇒ {
   users.records[id] = data;
};

Ardından, sosyal oturum açma akışının başlangıcını işleyecek sunucu uç noktasını kaydettik -

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();
});

Sosyal girişi başlattığımız hizmet sunucumuza yeniden yönlendirecek ve bu yönlendirmeyi halletmemiz gerekiyor.

Kullanıcı için benzersiz bir tanımlayıcı aldıktan sonra, bu kullanıcıyı daha önce görüp görmediğimizi kontrol ediyoruz. Evetse, onu adıyla selamlıyoruz. Değilse, adı sosyal ağdan alırız ve yeni bir kullanıcı kaydederiz -

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!");
         });
      }
   });
});

Son olarak, sunucunun 12345 portunu dinlemesini sağladık -

javascript
app.listen(12345);

Artık uygulamayı başlatabilir ve yerel tarayıcımızda test edebiliriz.

Eğer gidersen http://localhost:12345/auth/start/facebook Facebook giriş akışını başlatacaksınız.

Eğer gidersen http://localhost:12345/auth/start/twitter Twitter giriş akışını başlatacaksınız.

Hizmete giriş yaptıktan ve erişim izni verdikten sonra "Hoşgeldin serası!" Mesajını göreceksiniz. ilk kez yaparsanız ve art arda ziyaretlerinizde "[adınız] tekrar hoş geldiniz".

Bunu gerçek bir web sitesine entegre etmek için, örneğin, servis sağlayıcının logolarını oraya ekler ve logoları ilgili URL'lere bağlarsınız.

Ayrıca sözde veri tabanı gerçek bir veri tabanı ile değiştirilmelidir. Ve işte, 9 farklı sağlayıcıya kadar sosyal giriş!