web-dev-qa-db-ja.com

OAuthおよびTwitter、Facebook、Google、LinkedInなどへのOAuth2 API呼び出しを行うNode.jsクライアントライブラリはありますか?

私はたくさんのグーグルをしました、そして私が見つけることができた最高のものは: https://github.com/ciaranj/node-oauth

これに加えて、Twitter、Facebook、Google、LinkedInなどにAPI呼び出しを行って、ツイートを投稿したり、DM誰かを取得したり、友達リストを取得したり、投稿したりするためのラッパーを提供するライブラリはありますか? Facebook/G +他へのリンク?

私はPassport.jsを知っていますが、その使用法はこれらのソーシャルサイトからの認証と承認の取得に限定されています。それを超えて、現在、上記のアクティビティを実行するには、node-oauthを介してAPI呼び出しを個別化する必要があります。

私は何かを逃したことがありますか?そのようなライブラリを知っていますか?

12
pavanlimo

Passport.js を使用してアクセストークンを取得したら、 request を使用してサードパーティサービスへのすべてのAPI呼び出しを行うことをお勧めします(そして個人的に使用します)。

私の意見では、プロバイダー固有のラッパーは不必要な複雑さを追加するだけです。ほとんどのRESTfulAPIは、非常に単純なHTTPリクエストです。余分なレイヤーは邪魔になり、バグを追加して追跡するだけです。さらに、requestに固執することで、同じ使い慣れたモジュールを使用してanyサードパーティと統合できます。

22
Jared Hanson

CloudRail は良い選択肢かもしれません。ほとんどのソーシャルネットワークに抽象化されたAPIを提供し、認証を非常にうまく処理します。次に例を示します。

const services = require("cloudrail-si").services;
// let profile = new services.GooglePlus(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let profile = new services.GitHub(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let profile = new services.Slack(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let profile = new services.Instagram(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// ...
let profile = new services.Facebook(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");

profile.getFullName((err, fullName) => {
    if (err) throw err;
    console.log("User's full name is " + fullName);
});

profile.getEmail((err, email) => {
    if (err) throw err;
    console.log("User's email address is " + email);
});
3
Tmm

Passport.js もデプロイしており、認証以外の追加のリクエストをプルする必要があります。 Jared Hansonの「リクエスト」の提案を受け取り、README at 'request' github の下部にあるTwitterの例を使用しました。最初のvar request = require('request');var qs = require('querystring');は、Twitterパスポートの認証とfollowers_countの取得の例です。2次リクエストは認証コールバック関数内にネストされています。

passport.use(new TwitterStrategy({
  // var configAuth = require('./auth');
  consumerKey       : configAuth.twitterAuth.consumerKey,
  consumerSecret    : configAuth.twitterAuth.consumerSecret,
  callbackURL       : configAuth.twitterAuth.callbackURL,
  passReqToCallback : true
},

function(req, token, tokenSecret, profile, done) {

  process.nextTick(function() {

    if (!req.user) {

      User.findOne({ 'Twitter.id' : profile.id }, function(err, user) {
        if (err)
          return done(err);
        if (user) {
          if (!user.Twitter.token) {
            user.Twitter.token       = token;
            user.Twitter.tokenSecret = tokenSecret;
            user.Twitter.username    = profile.username;
            user.Twitter.displayName = profile.displayName;

            // [ADDED] Twitter extended API calls using 'request' and 'querystring'
            var oauth = { 
              consumer_key    : configAuth.twitterAuth.consumerKey, 
              consumer_secret : configAuth.twitterAuth.consumerSecret, 
              token           : token, 
              token_secret    : tokenSecret
            }

            var url = 'https://api.Twitter.com/1.1/users/show.json?';

            var params = { 
              user_id: profile.id
            }

            url += qs.stringify(params)
            request.get({url:url, oauth:oauth, json:true}, function (e, r, result) {
              // Get followers_count here
              user.Twitter.followers = result.followers_count;

              // [MOVED] db.save moved into second callback function
              user.save(function(err) {
                if (err)
                  throw err;
                return done(null, user);
              });
            });
            // [END ADD]        
          }
          return done(null, user);
        } else {
          var newUser                 = new User();

          newUser.Twitter.id          = profile.id;
          newUser.Twitter.token       = token;
          newUser.Twitter.tokenSecret = tokenSecret;
          newUser.Twitter.username    = profile.username;
          newUser.Twitter.displayName = profile.displayName;

          // [ADDED] Twitter extended API calls using 'request' and 'querystring'
          var oauth = { 
            consumer_key    : configAuth.twitterAuth.consumerKey, 
            consumer_secret : configAuth.twitterAuth.consumerSecret, 
            token           : token, 
            token_secret    : tokenSecret
          }

          var url = 'https://api.Twitter.com/1.1/users/show.json?';

          var params = { 
            user_id: profile.id
          }

          url += qs.stringify(params)
          request.get({url:url, oauth:oauth, json:true}, function (e, r, result) {
            // Get followers_count here
            newUser.Twitter.followers = result.followers_count;

            // [MOVED] db.save moved into second callback function
            newUser.save(function(err) {
              if (err)
                throw err;
              return done(null, newUser);
            });
          });
          // [END ADD]     

        }
      });
    } else {
      var user                 = req.user;

      user.Twitter.id          = profile.id;
      user.Twitter.token       = token;
      user.Twitter.tokenSecret = tokenSecret;
      user.Twitter.username    = profile.username;
      user.Twitter.displayName = profile.displayName;

      // [ADDED] Twitter extended API calls using 'request' and 'querystring'
      var oauth = { 
        consumer_key    : configAuth.twitterAuth.consumerKey, 
        consumer_secret : configAuth.twitterAuth.consumerSecret, 
        token           : token, 
        token_secret    : tokenSecret
      }

      var url = 'https://api.Twitter.com/1.1/users/show.json?';

      var params = { 
        user_id: profile.id
      }

      url += qs.stringify(params)
      request.get({url:url, oauth:oauth, json:true}, function (e, r, result) {
        // Get followers_count here
        user.Twitter.followers = result.followers_count;

        // [MOVED] db.save moved into second callback function
        user.save(function(err) {
          if (err)
            throw err;
          return done(null, user);
        });
      });     
      // [END ADD]
    }
  });
}));

Jaredの助けに非常に寛大であり、Passport.jsを作成してくれたことに感謝します!

1
Sun Lee