facebook - 使用 Facebook JS SDK 管理权限
问题描述
我有一个我想要选择/取消选择的 fb 权限列表,然后我想用这个逻辑将更改提交给 facebook,只需一个用户操作(单击):
1)登录FB;
2)删除(撤销)所有权限;
3)请求新的(选定的)权限。
<button onclick="changePermissions()">Change permissions</button>
function changePermissions() {
FB.login((response) => {
FB.api('/me/permissions', 'DELETE', () => {
FB.login(() => {}, {
scope: 'email,publish_pages', // the new selected permissions
auth_type: 'rerequest'
});
});
});
}
步骤1)和2)按预期工作,但步骤3)失败。(具有新权限的新登录弹出窗口被浏览器阻止)。Facebook js sdk 说“FB.logion() 必须从按钮事件处理程序中调用”。
如何仅通过一个用户操作(1 单击)来实现此场景。我不想强迫用户与 UI 进行多次交互以更改他的权限?
解决方案
如果用户已经授权您的应用程序,您可以删除权限 BEFORE FB.login
。FB.getLoginStatus
无论如何都要重新授权用户。所以第一个 FB.login 不需要,但是删除权限的 API 调用是异步的,这就是浏览器阻止第二个FB.login
调用的原因。
只需在 FB.getLoginStatus 之后删除权限,并且只FB.login
在changePermissions
函数中执行。
示例FB.getLoginStatus
:https ://www.devils-heaven.com/facebook-javascript-sdk-login/
推荐阅读
- amazon-web-services - AWS RDS 服务创建:无法为 RDS 选择子网?
- flutter - 如何为 Flutter 中的 TextField 和 NumberFormat 异常赋予默认值?
- java - 我的“自定义模型数据”纹理不适用于我自己的文件
- google-sheets - 拖动公式时删除零
- python - 如何在 Python 中绘制多个子图数据框直方图?
- flutter - 我的 Flutter 代码在模拟器上不起作用。手势检测器似乎没有检测到手势
- odoo - odoo docker run show "'postInstallation': 无法连接到 postgresql:5432"
- python - 时间序列多类分类数据的损失和准确度常数
- c# - 在只读字段和 getter-only 属性之间使用一种方式比另一种方式有什么好处?
- c++ - QT5 错误:未知类型名称“QCoreApplication”。Qt5 中的第一个程序