Javascript 是否有Node.js客户端库可以对Twitter、Facebook、Google、LinkedIn等进行OAuth和OAuth2 API调用。?
我做了很多谷歌搜索,我能找到的最好的结果是: 除此之外,还有没有其他库提供包装器,可以对Twitter、Facebook、Google、LinkedIn等进行API调用,比如发布推特、DM某人、获取好友列表或发布Facebook/G+等链接 我知道Passport.js,但它的使用仅限于从这些社交网站获得身份验证和授权。除此之外,目前我们还必须通过节点oauth对API调用进行个性化处理,以执行上述活动 我错过什么了吗?您知道任何此类库吗?一旦您使用获取访问令牌,我建议(并亲自使用)对第三方服务进行所有API调用 在我看来,特定于提供者的包装只是增加了不必要的复杂性。大多数RESTful API都是非常简单的HTTP请求。额外的层只会妨碍你,并添加bug来追踪。此外,通过坚持使用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调用进行个性化处理,以执行上述活动 我错过什么了吗?您知道任何此类库吗?一旦您使用获取访问令牌,我建议(并亲自使用)对第三方服
请求
,您可以使用相同的、熟悉的模块与任何第三方进行集成。我也在部署,需要在身份验证之外提取额外请求。
我采纳了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特有的特性。此外,我还将其用作获取访问令牌的替代方案。