流星访问令牌

zVi*_*tor 5 oauth meteor

使用Meteor时,使用新的身份验证系统,如何使用软件包登录时获取facebook 访问令牌accounts-facebook

Llo*_*oyd 16

从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);
})
Run Code Online (Sandbox Code Playgroud)

或发布:

//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;
Run Code Online (Sandbox Code Playgroud)


zVi*_*tor 6

更新和简化劳埃德的答案,我们得到这个:

服务器

Meteor.publish("currentAccessToken", function(){
  return Meteor.users.find(this.userId, {fields: {'services.facebook.accessToken': 1}});
});
Run Code Online (Sandbox Code Playgroud)

客户

Meteor.autosubscribe(function(){
  var newUser = Meteor.user();
  Meteor.subscribe('currentAccessToken');
});
Run Code Online (Sandbox Code Playgroud)

它会在用户每次更改状态时更新,并且可以访问(存在时)访问令牌 Meteor.user().services.facebook.accessToken