我也部署了Passport.js,並且需要將額外請求拉到身份驗證之外。 我接受了Jared Hanson的'請求'建議,並使用了在自述文件底部找到的'request' github上的Twitter示例。初始var request = require('request');
和var qs = require('querystring');
這裏後,Twitter的護照認證&得到FOLLOWERS_COUNT例子 - 次級請求被嵌套在認證回調函數內:
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]
}
});
}));
非常感謝賈裏德爲是非常慷慨的在他的幫助和創建護照.js文件!
我使用passport.js的臉譜和推特有什麼辦法我可以讓臉譜和推特朋友使用它? –
我認爲restler也是一個很好的lib來代替請求。 –
每當您想要使用新的API服務時都必須重新發明輪子,這是浪費時間 – AshClarke