Node.js实现Facebook授权撤销及撤权事件接收方案咨询
Facebook登录功能相关问题解答
应用内触发撤销Facebook授权的实现方案
有官方接口支持,无需引导用户跳转Facebook个人设置页操作:
- 全量撤销用户对应用的所有授权时,直接向对应Graph API端点发送
DELETE请求即可:
请求携带该用户的有效用户级访问令牌——也就是你用passport-facebook走登录流程时,Facebook返回的DELETE https://graph.facebook.com/v19.0/{user-fb-id}/permissionsaccessToken字段值,调用成功后的效果和用户手动在Facebook端撤权完全一致,所有已授予的权限都会被清除。 - 如果后续有单独撤销某一项权限的需求,可以调用细分权限端点:
DELETE https://graph.facebook.com/v19.0/{user-fb-id}/permissions/{permission-name} - 实操注意点:
- 该接口不需要额外申请权限审核,只要持有对应操作用户的有效用户级访问令牌就能调用,不要用应用级访问令牌发起请求,会直接报权限错误
- 接口调用成功后必须同步更新本地数据,清除该用户的Facebook绑定关联、已存储的失效访问令牌,避免后续逻辑出错
用户端手动撤权的事件感知方案
订阅Graph API的User类型Webhook无法收到撤权事件通知:
- User类型Webhook的推送范围是用户个人资料、发布动态、好友关系等用户侧字段的变更,用户撤权属于应用和Facebook平台之间的授权关系变更事件,不在User节点的推送范畴里,就算订阅User节点的所有字段,也收不到撤权相关通知。
- 正确的实现方式是:去Facebook应用后台的「Facebook登录」配置板块,填写独立的撤销授权回调地址(Deauthorize Callback URL)。只要用户在Facebook端手动撤销了你应用的授权,Facebook就会给这个地址发一个带签名的POST请求,请求体里会携带撤权用户的Facebook用户ID,你本地用App Secret校验请求签名合法(防止恶意伪造请求解绑用户账号)后,更新对应账号的Facebook绑定状态即可。
- 这个回调不需要额外申请Webhook订阅权限,配置完地址就生效,是Facebook官方专门为撤权场景设计的通知机制,适配成本很低。
内容的提问来源于stack exchange,提问作者EdPauw
相关产品推荐
相关产品推荐

