我目前正在尝试进行简单的API调用,以显示一些用户数据(包括 friend 列表)。
我的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的方法并获得适当的访问 token 。有人可以帮助我设置正确的访问 token 吗?非常感激!
最佳答案
看起来您正在将Meteor包Facebook OAuth登录流与Facebook自己的JS SDK混合在一起。每当我在Meteor上使用FB做东西时,我都会避免使用JS SDK,而纯粹选择使用Meteor软件包。无论如何,您的问题似乎都是通过 meteor 包获取访问 token ,但是当您调用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)作为参数,并将数据返回到类似于FB.api的客户端Facebook提供的方法。