【发布时间】:2012-09-24 18:33:24
【问题描述】:
当使用Meteor 和新的authentication 系统时,使用accounts-facebook 包登录时如何获取facebook 访问令牌?
【问题讨论】:
当使用Meteor 和新的authentication 系统时,使用accounts-facebook 包登录时如何获取facebook 访问令牌?
【问题讨论】:
从 Meteor.method 获取它:
// server
Meteor.methods({
getAccessToken : function() {
try {
return Meteor.user().services.facebook.accessToken;
} catch(e) {
return null;
}
}
});
// client
Meteor.call("getAccessToken", function(error, accessToken){
console.log(accessToken);
})
或发布它:
//server
Meteor.publish("currentUserAccessToken", function(){
var self = this;
if (this.userId()){
handle = Meteor.users.find(this.userId()).observe({
added: function(user){
self.set("currentUserAccessToken", user._id, {value: user.services.facebook.accessToken});
self.flush();
},
changed: function(user){
self.set("currentUserAccessToken", user._id, {value: user.services.facebook.accessToken});
self.flush();
}
});
this.onStop(function() {
handle.stop();
});
}
});
//client
var AccessToken = new Meteor.Collection("currentUserAccessToken");
Meteor.subscribe("currentUserAccessToken");
//access the value
var accessToken = AccessToken.findOne().value;
【讨论】:
更新和简化Lloyd's answer,我们得到这个:
Meteor.publish("currentAccessToken", function(){
return Meteor.users.find(this.userId, {fields: {'services.facebook.accessToken': 1}});
});
Meteor.autosubscribe(function(){
var newUser = Meteor.user();
Meteor.subscribe('currentAccessToken');
});
每次您的用户更改状态时它都会更新,并且访问令牌可以通过Meteor.user().services.facebook.accessToken 访问(如果存在)
【讨论】: