我试图找出如何将用户的Twitter帐户中的其他信息添加到Meteor安装中创建的帐户。
特别是我试图通过Twitter Api v 1.1访问用户的生物,但我没有成功。
因此,我试图将Accounts.onCreateUser(function(options,user) {});
扩展为Twitter生物。我怎么做?然后从模板中访问这些数据?
这里是从Github返回数据的完美答案,但我在将这种方法移植到Twitter作为身份验证服务时遇到了麻烦:Meteor login with external service: how to get profile information?
答案 0 :(得分:1)
你可以这样做:
Accounts.onCreateUser(function (options, user){
user.profile = options.profile || {};
//Twitter returns some useful info as the username and the picture
if(user.services.twitter){
user.profile.picture= user.services.twitter.profile_image_url_https;
user.profile.username= user.services.twitter.screenName;
}
return user;
});
为了从Twitter API获取数据,我使用的是节点包oauth:
OAuth = Npm.require('oauth');
oauth = new OAuth.OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
'consumerKey',
'secretKey',
'1.0A',
null,
'HMAC-SHA1'
);
getTwitterUserData: function (id) {
var accountUser = AccountsUserCollection.findOne({_id: id});
var url = "https://api.twitter.com/1.1/users/show.json?screen_name="+accountUser.screen_name;
oauth.get(url, 'accessToken', 'accessSecret', function (err, data, response) {
if(err){
console.log(err);
}
if(data){
Fiber(function () {
AccountsUserCollection.update({_id: accountUser._id}, {$set: {dataTwitter: JSON.parse(data)}});
}).run();
}
if(response){
Log.info(response);
}
});
}