是否有任何Node.js客户端库来对Twitter,Facebook,Google,LinkedIn等进行OAuth和OAuth2 API调用?

我做了很多谷歌search,我能find的最好的是: https : //github.com/ciaranj/node-oauth

是否有任何图书馆,提供包装,使Twitter的调用Twitter,Facebook的,谷歌,LinkedIn等发表推特或DM某人或得到朋友列表或张贴到Facebook / G +等的链接。 ?

我知道Passport.js,但它的使用限于从这些社交网站获得authentication和授权。 除此之外,目前我们将不得不通过node-oauth个性化API调用来执行上述活动。

我错过了什么吗? 你知道有这样的图书馆吗?

一旦您使用Passport.js获取访问令牌,我build议(并亲自使用) 请求将所有API调用到第三方服务。

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

CloudRail可能是一个很好的select。 它为大多数社交networking提供了一个抽象的API,并且很好地处理了身份validation。 这里是一个例子:

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

我也正在部署Passport.js ,需要额外的请求,而不是authentication。 我采取了Jared Hanson的“请求”build议,并使用在'request'github上 README底部的Twitter示例。 在最初的var request = require('request');var qs = require('querystring'); 这里是Twitter的通行证authentication和得到followers_count的例子 – 二级请求嵌套在authenticationcallback函数内:

 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非常慷慨!