流星制作应用无法使用Facebook的user_friends权限

时间:2016-01-15 23:02:13

标签: android facebook cordova facebook-graph-api meteor

我有一个使用Facebook API的移动流星应用程序,并使用accounts-facebook包管理用户身份验证和注册。

只要我在meteor.com服务器和本地版本上测试应用程序,我提供的以下代码成功使应用程序使用Facebook的user_friends权限:

(那是在client / accounts.js下)

Accounts.ui.config({
    requestPermissions: {
        facebook: ['user_friends']
    } 
});

然而,自从我使用mup部署到生产环境后,似乎user_friends权限不再对Facebook本身生效。浏览我的MongoDB我可以看到,在 db.meteor_accounts_loginServiceConfiguration 集合中,Facebook的文档是:

{
  _id: "gCMyTCnTXq3RTPMWm",
  service: "facebook",
  appId: "*********", // censored
  loginStyle: "redirect",
  secret: "***************************", // censored
  requestPermissions: [
    "user_friends"
  ]
}

因此,Meteor应用程序知道它应该向新用户请求此权限。看看我的Facebook帐户应用程序隐私设置,我可以看到,与我的非生产版本相比,我的应用程序不再有“用户朋友”权限:

Facebook no user friends permissions

由于它是移动应用,我尝试编辑 accounts-config.js 以包含权限:

ServiceConfiguration.configurations.upsert(
    { service: "facebook" },
    {
        $set: {
            appId: "***********", // censored
            loginStyle: "redirect",
            secret: "********************************", // censored
            requestPermissions: ['user_friends']
        }
    }
);

因为我有自定义登录按钮,所以在点击它时也会这样做:

Meteor.loginWithFacebook(['user_friends']);

但是没有成功检索权限。每次我做这些更改时,我都会从我的Facebook帐户中删除用户和应用程序,并再次尝试从新的Facebook登录,以避免您无法覆盖Facebook对现有用户的权限。

1 个答案:

答案 0 :(得分:0)

显然我使用了Meteor.loginWith方法错误。它应该得到一个包含requestPermissions字符串数组的选项对象,问题解决了:

        Meteor.loginWithFacebook({requestPermissions: ['user_friends']}, function(err){
            if (err){
                throw new Meteor.Error("facebook failure");
            }
        });