启动“登录”对话框最重要的流程之一是选择应用想要访问的数据。上述示例均使用了 scope
参数,它就是您请求访问用户数据的方式。这些参数内容均叫作权限。
如需深入了解权限,请参阅我们的权限指南。但在处理权限和“登录”对话框时,请注意以下几点:
使用 Facebook 登录的最佳实践之一是,不要同时请求读取权限和发布权限。为此,您的应用可以在用户登录一段时间之后再请求更多权限。那时,您只需要启动包含所请求新权限的“登录”对话框即可。
例如,假设您的“登录”按钮包含以下权限:
<fb:login-button scope="public_profile" onlogin="checkLoginState();"> </fb:login-button>
如果检查 /me/permissions
了解用户在接受后授予的权限,您会看见以下代码:
{"data": [ { "permission":"public_profile", "status":"granted" } ] }
如果之后想要添加 email
权限,您可以通过 FB.login()
函数重新启动“登录”对话框,如下所示:
FB.login(function(response) { console.log(response); }, {scope: 'email'});
(必须通过按钮的事件处理程序调用此函数,否则对话框可能被浏览器的弹出窗口拦截器阻止。)
注意,上述对话框只会请求新权限。收到新权限后,检查 /me/permissions
会生成以下结果:
{"data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"email", "status":"granted" } ] }
注意,新的 email
权限添加到了已允许的权限列表。
“Facebook 登录”允许用户拒绝与应用分享某些权限。如果用户拒绝 user_likes
(赞),则检查 /me/permissions
以了解授予哪些权限会生成以下结果:
{ "data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"user_likes", "status":"declined" } ] }
注意,user_likes
的状态是被拒绝,而不是已授予。
您可以再一次请求用户向应用授予其曾拒绝的权限。您应该设置一个说明页面,告知用户应该授予相关权限的原因,然后重新请求。但如果您使用前面的章节中所述的方法,“登录”对话框不会请求此权限。
因为用户拒绝授予某权限后,“登录”对话框便不会重新请求该权限,除非您明确告知对话框要再次请求已拒绝的权限。
只需向 FB.login()
调用添加 auth_type: rerequest
标记即可作:
FB.login( function(response) { console.log(response); }, { scope: 'user_likes', auth_type: 'rerequest' } );
添加标记后,“登录”对话框就会重新请求被拒绝的权限。此对话框与“重新请求权限”章节所示的对话框非常相似,但此对话框让您可以重新请求被拒绝的权限。