我有一个应用程序是在开发模式。我的个人Facebook帐户是该应用程序的管理员。我的理解是,如果该帐户通过OAuth授权应用程序,它应该拥有所有权限。但是,当我使用该帐户检索令牌时,它只具有public profile权限。我还注意到,在检索令牌,将其转换为长期令牌,然后通过API explorer添加额外的权限后,新的权限将应用于长期令牌(即使新的令牌被加载到API explorer控制台)。
我对管理员、开发人员和测试人员角色应该拥有所有权限的理解是错误的吗?是否还有其他我应该做的事情来确保令牌拥有所有权限?通过API资源管理器添加权限是唯一的方法吗?
以下是我遵循的步骤以及在每个步骤中经历的内容:
1)我通过Javascript SDK (带有ngx-facebook包装器)使用Facebook Login,该SDK使用处于开发模式的my应用程序的应用程序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)我以app所在开发者账号的管理员身份登录API explorer控制台,选择manage_pages权限,点击[获取访问令牌]。我拿回了一个新的代币。8)我忽略该令牌并使用原始令牌。它现在可以成功地检索该页面的帖子。9)我检查了原始token的权限,了解到API explorer中的流程将权限添加到原始的长期token中:
{
"data": [
{
"permission": "manage_pages",
"status": "granted"
},
{
"permission": "pages_show_list",
"status": "granted"
},
{
"permission": "public_profile",
"status": "granted"
}
]
}发布于 2019-05-22 06:47:40
我做了更多的研究,找到了答案。我将在这里回答这个问题,以防其他人正在为此而苦苦挣扎。
虽然开发中的应用程序的所有管理员、开发人员和测试人员用户确实都有权访问大多数可用权限,但您仍然必须传递您希望在facebook登录调用中请求的权限列表。
例如,使用Facebook Login Javscript SDK,您可以在options参数的“scope”属性中发送列表。它看起来是这样的:
FB.login(function(response) {
// handle the response
}, {scope: 'manage_pages,instagram_basic,instagram_manage_insights,read_insights'});这是如果你使用Angular的ngx-facebook包装器,它会是什么样子:
this.facebook.login({scope: 'manage_pages,instagram_basic,instagram_manage_insights,read_insights' }).then我忽略的基本问题是Facebook Login需要作用域选项。否则,它默认只请求'public_profile‘选项。
https://stackoverflow.com/questions/56245296
复制相似问题