Meteor:Facebook基本API调用错误:访问令牌

时间:2014-08-21 09:55:54

标签: javascript facebook-graph-api meteor

我目前正在尝试进行简单的API调用以显示一些用户数据(包括朋友列表)。

我的Facebook登录工作具有以下请求权限(

 'click .facebook': function() {
        Meteor.loginWithFacebook({ requestPermissions: ['email', 'read_friendlists',    'accesToken']},
        function (error) {
            if (error) {
                return console.log(error);
            }
        });
},

比我通过

初始化facebok
Template.friendsList.rendered = function(){
window.fbAsyncInit = function() {
    FB.init({
        appId      : '278237565717322',
        xfbml      : true,
        version    : 'v2.0'
    });
};

(function(d, s, id){
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

我想用

进行简单的API调用
"click .facebookfriends": function(){
    FB.api('/me', function(response) {
        console.log(response)
    });
}

这给了我以下错误:

code: 2500
message: "An active access token must be used to query information about the current user."
type: "OAuthException"

我尝试了几个例子,但似乎无法找到一种方法来做loginWithFacebook并获得正确的accessstoken。任何人都可以帮我设置正确的访问令牌吗?非常感激!

1 个答案:

答案 0 :(得分:5)

看起来你正在将Meteor包Facebook OAuth登录流与Facebook自己的JS SDK混合在一起。每当我在Meteor上使用FB时,我就避免使用JS SDK,而是选择纯粹的Meteor包。无论您的问题是,您通过meteor包获取访问令牌,但是当您调用FB.api({...})时,FB JS SDK无法访问它。

尝试类似:

服务器:

Meteor.methods({
  fb_me: function() {
    var user = Meteor.users.findOne(this.userId);
    //note: I don't have access to a meteor project hooked up to the FB API
    //so where the access token is stored in a user object may differ,
    //I got this from an old project. Try logging user here to find it
    //if this doesn't work
    var accessToken = user.services.facebook.accessToken;

    if (!user || !accessToken)
      throw new Meteor.Error(500, "Not a valid Facebook user logged in");

    return HTTP.get("https://graph.facebook.com/me", {
      params: {access_token: accessToken}}).data;
  }
});

客户端:

"click .facebookfriends": function(){
    Meteor.call('fb_me', function(err, res) {
      if (!err)
        console.log(res);
    }
}

无需使用FB JS SDK就行了。

由于你可能会让你的客户端进行大量的API调用,我建议你制作一个Meteor.method,它将API端点(例如/ me)作为参数并将数据返回给客户端,类似于Facebook提供的FB.api方法。