Javascript 是否有Node.js客户端库可以对Twitter、Facebook、Google、LinkedIn等进行OAuth和OAuth2 API调用。?

Javascript 是否有Node.js客户端库可以对Twitter、Facebook、Google、LinkedIn等进行OAuth和OAuth2 API调用。?,javascript,node.js,oauth,oauth-2.0,twitter-oauth,Javascript,Node.js,Oauth,Oauth 2.0,Twitter Oauth,我做了很多谷歌搜索,我能找到的最好的结果是: 除此之外,还有没有其他库提供包装器,可以对Twitter、Facebook、Google、LinkedIn等进行API调用,比如发布推特、DM某人、获取好友列表或发布Facebook/G+等链接 我知道Passport.js,但它的使用仅限于从这些社交网站获得身份验证和授权。除此之外,目前我们还必须通过节点oauth对API调用进行个性化处理,以执行上述活动 我错过什么了吗?您知道任何此类库吗?一旦您使用获取访问令牌,我建议(并亲自使用)对第三方服

我做了很多谷歌搜索,我能找到的最好的结果是:

除此之外,还有没有其他库提供包装器,可以对Twitter、Facebook、Google、LinkedIn等进行API调用,比如发布推特、DM某人、获取好友列表或发布Facebook/G+等链接

我知道Passport.js,但它的使用仅限于从这些社交网站获得身份验证和授权。除此之外,目前我们还必须通过节点oauth对API调用进行个性化处理,以执行上述活动

我错过什么了吗?您知道任何此类库吗?

一旦您使用获取访问令牌,我建议(并亲自使用)对第三方服务进行所有API调用

在我看来,特定于提供者的包装只是增加了不必要的复杂性。大多数RESTful API都是非常简单的HTTP请求。额外的层只会妨碍你,并添加bug来追踪。此外,通过坚持使用
请求
,您可以使用相同的、熟悉的模块与任何第三方进行集成。

我也在部署,需要在身份验证之外提取额外请求。 我采纳了Jared Hanson的“请求”建议,并使用了在自述文件底部的Twitter示例。在初始
var请求=require('request')之后
var qs=require('querystring')这是Twitter passport身份验证和获取追随者计数示例-次要请求嵌套在身份验证回调函数中:

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

可能是一个不错的选择。它为大多数社交网络提供了一个抽象的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);
});

我正在为facebook和twitter使用passport.js。有什么办法可以让facebook和twitter的朋友使用它吗?我认为restler也是一个很好的库,可以用来代替请求。每次你想使用一个新的API服务,都要重新发明轮子,这是浪费时间。我个人将它用作通用REST API库。它构建在请求之上,但具有RESTAPI特有的特性。此外,我还将其用作获取访问令牌的替代方案。