如果用户先前已批准对应用程序的访问并提供了所有权限,则 facebook OAuth 对话框会在不提示的情况下重定向回提供的 redirect_uri ...
我想覆盖该行为并强制对话框再次向用户询问权限...
想知道这是否可以做到,因为文档没有提供关于这是否可行的帮助。
如果用户先前已批准对应用程序的访问并提供了所有权限,则 facebook OAuth 对话框会在不提示的情况下重定向回提供的 redirect_uri ...
我想覆盖该行为并强制对话框再次向用户询问权限...
想知道这是否可以做到,因为文档没有提供关于这是否可行的帮助。
我知道这是一个旧帖子,但我只是偶然发现它,因为我在其他地方找到了正确的答案,所以我想我会把它贴在这里。
您可以发送auth_type=reauthorize
.
AFAIK,auth_type
具有以下选项:*reauthorize
始终具有权限 *rerequest
拒绝/撤销权限 *reauthenticate
始终以用户身份确认密码。
正如@Igy 已经提到的,您可以通过向端点发出DELETE
请求来撤销用户访问权限。me/permissions
剩下的很简单:
FB.api('me/permissions', 'delete', function (r1) {
// FB.login relies on FB.getLoginStatus.
// Force reloading the login status.
FB.getLoginStatus(function (r2) {
FB.login(function (r3) {});
}, true);
});
你为什么想做这个?让用户通过权限阶段是一个关键步骤,通常会失去大量流量。当弹出窗口显示时,无论如何都完全由 Facebook 管理,所以当某人已经完成时,不可能要求他们接受权限。他们唯一会再次看到请求的情况是他们首先撤销了权限,或者您的应用程序提高了所请求的访问级别。
您可以调用auth.revokeAuthorization。不要担心它说其余的 api 已被弃用,因为目前没有用于此的图形 api 方法,我认为他们不会删除它,直到有一个。
我没有将 OAuth 与 facebook API 一起使用,但如果我正确理解了您的问题,这是您可以做到的一种方法:
如果用户先前已批准访问,则没有提示
当 facebook 将用户重定向回您的应用程序 (redirect_uri) 时,您可以看到缺少授权授权,由此您可以判断用户没有批准您的请求。
强制对话框再次询问用户权限
然后您可以再次请求新令牌,但令牌权限有限(范围访问受限,因为显然用户没有批准您之前的范围请求),并且将再次要求用户使用新的权限集批准您的请求。这是我会这样做的方式,我认为这是大多数应用程序在用户第一次拒绝他们的请求时这样做的方式。