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

Meteor: Facebook basic API call error: access token

本文关键字:错误 访问令牌 调用 基本 Facebook Meteor API      更新时间:2023-09-26

我目前正试图做一个简单的API调用来显示一些用户数据(包括朋友列表)。

我有一个工作的Facebook登录与以下请求权限(

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

然后通过

初始化facebook
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并获得适当的访问权限。有没有人可以帮助我获得一个适当的访问令牌设置?感谢!

看起来你把Meteor包Facebook OAuth登录流和Facebook自己的JS SDK混在一起了。每当我在Meteor上使用FB时,我都会避免使用JS SDK,而纯粹选择使用Meteor包。不管它似乎你的问题是,你通过流星包获得访问令牌,但FB JS SDK没有访问它,当你调用FB。api({…})

试试这样写:

服务器:

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调用,我建议你做一个流星。方法,该方法将API端点(例如/me)作为参数,并将数据返回给客户端,类似于FB。