在开发模式下,您能否提供有关Facebook graph API扩展令牌权限的指南?

时间:2019-05-21 19:36:08

标签: facebook facebook-graph-api

我有一个处于开发模式的应用程序。我的个人Facebook帐户是该应用程序的管理员。我的理解是,如果该帐户通过OAuth授权该应用,则它应具有所有权限。但是,当我使用该帐户检索令牌时,它仅具有公共配置文件权限。我还注意到,在检索令牌后,将其转换为长期令牌,然后通过API资源管理器添加其他权限,即新的权限将应用到长期令牌(即使将新令牌加载到API资源管理器中)控制台)。

我理解管理员,开发人员和测试人员角色应该具有所有权限是错的吗?我还有其他事情要确保令牌具有所有权限吗?通过API资源管理器添加权限是唯一的方法吗?

以下是我遵循的步骤以及每个步骤的经验:

1)我通过Javascript SDK(带有ngx-facebook包装器)使用Facebook登录,并使用处于开发模式的我的应用程序的应用程序ID进行了初始化。 2)我使用应用程序管理员的Facebook帐户登录。 3)生成了短期令牌,我使用/ oauth / access_token端点将其转换为长期令牌。 4)我存储了长期令牌以备将来使用。 5)我尝试使用长期令牌来检索管理员帐户拥有的页面的帖子,并得到以下响应:

"error":{"error":{"message":"(#10) To use \'Page Public Content Access\', your use of this endpoint must be reviewed and approved by Facebook. To submit this \'Page Public Content Access\' feature for review please read our documentation on reviewable features: https://developers.facebook.com/docs/apps/review."

6)我使用长期令牌和用户ID检查用户的权限,并得到以下响应。这解释了上面的响应,但是我认为管理员,开发人员和测试人员角色应该有权访问所有权限。

{
  "data": [
    {
      "permission": "public_profile",
      "status": "granted"
    }
  ]
}

7)我进入以包含我的应用程序的开发人员帐户的管理员身份登录的API资源管理器控制台,选择manage_pages权限,然后单击“获取访问令牌”。我得到了一个新令牌。 8)我忽略该令牌并使用原始令牌。现在,它可以成功检索该页面的帖子。 9)我检查了原始令牌的权限,并在API资源管理器中学习了向原始长期令牌添加权限的过程:

{
    "data": [
        {
            "permission": "manage_pages",
            "status": "granted"
        },
        {
            "permission": "pages_show_list",
            "status": "granted"
        },
        {
            "permission": "public_profile",
            "status": "granted"
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

我做了更多研究,找到了答案。如果其他人为此感到挣扎,我会在这里回答。

确实,正在开发中的应用程序的所有管理员,开发人员和测试人员用户都可以访问大多数可用权限,而您仍必须在Facebook登录呼叫中传递要请求的权限列表。

例如,使用Facebook登录Javscript SDK,您可以在options参数的'scope'属性中发送列表。看起来像这样:

FB.login(function(response) {
  // handle the response
}, {scope: 'manage_pages,instagram_basic,instagram_manage_insights,read_insights'});

如果您将ngx-facebook包装器用于Angular,这将是这样:

this.facebook.login({scope: 'manage_pages,instagram_basic,instagram_manage_insights,read_insights' }).then

我想念的最基本的东西是Facebook登录需要scope选项。否则,默认情况下,它仅请求“ public_profile”选项。