身份验证与数据访问权限的对比

Facebook 登录具备 2 项主要优点:身份验证和数据访问权限。这 2 项优点并不互斥。您可以使用 Facebook 登录对用户进行身份验证,而无需计划访问其数据。在这种情况下,您不必请求获取权限或让应用完成应用审核

身份验证和数据访问权限的效力都只会持续一段有限的时间。但是,身份验证和数据访问权限的有效期不同,具体取决于不同的因素。

身份验证

通过身份验证,用户可以使用其 Facebook 凭据登录您的移动应用或网页应用并创建帐户。他们无需创建或记住单独的密码。

身份验证过期

应用使用 Facebook 登录对用户进行身份验证时,会收到用户访问口令。如果应用使用其中一种 Facebook SDK,则此口令的有效期约为 60 天。但是,只要该用户使用应用,SDK 就会自动刷新此口令,因此这些口令的有效期为最近一次使用应用之后的 60 天。如果应用未使用 Facebook SDK,则您需要手动添加用于刷新该用户口令的代码。如果用户访问口令过期,则应用必须让用户再次完成登录流程。

数据访问权限

另外,通过 Facebook 登录,您可以在用户登录应用时请求获取权限。如果用户授予这些权限,则应用可以利用这些权限访问各项用户数据。例如,应用可以访问用户的姓名和个人头像。

如果应用请求获取权限,则通常必须让其完成应用审核,这样 Facebook 才能确保数据不会遭到违规使用。应用请求获取用户的姓名和照片(默认的个人主页字段)以及邮箱时无需完成应用审核,但获取所有其他权限都需要审核。如需查看权限清单以及了解请求哪些权限时需要完成应用审核,请参阅权限参考文档

数据访问权限过期

数据访问权限的有效期为 90 天,此期限从用户最后登入的时间开始计算。此 90 天期限过期后,用户仍然可以访问应用,即系统仍会将他们视为已通过身份验证,但应用无法访问用户数据。如需重新获取数据访问权限,应用必须请求用户重新授予权限。

如需使用 Android 版 Facebook SDK 或 iOS 版 Facebook SDK 请求重新授权,请对 LoginManager 调用 reauthorizeDataAccess()

如果使用 Javascript 版 Facebook SDK,请使用 auth_type: 'reauthorize'

FB.login(function(response) {
  // Original FB.login code
}, { auth_type: 'reauthorize' })

如果是网页,请使用 auth_type=reauthorize 发出调用。

以下权限不会过期:

  • ads_read
  • ads_management
  • business_management
  • configure_page_transactions
  • pages_manage_ads
  • pages_manage_cta
  • pages_manage_instant_articles

  • pages_manage_engagement

  • pages_manage_metadata
  • pages_manage_posts
  • pages_messaging
  • pages_read_engagement
  • pages_read_user_content
  • pages_show_list
  • read_audience_network_insights
  • read_insights

测试对用户数据的访问权限何时过期

使用 Android 版 SDK 和 iOS 版 SDK 时,您可以对访问口令对象调用 dataAccessExpirationTime,借此检索应用对用户数据的访问权限将于何时过期。此方法会返回一个日期,说明数据访问权限的过期时间。

您还可以通过调用 isDataAccessExpired 来返回一个布尔值,以测试对用户数据的访问权限过期与否。

在服务器端,您可以从 debug_token 端点检索此信息。

在网页端,您可以在 payload: data_access_expiration_time 中查看过期时间。

{
  status: 'connected',
  authResponse: {
    accessToken: '...',
    expiresIn:'...',
    reauthorize_required_in:'...',
    data_access_expiration_time: '...',
    signedRequest:'...',
    userID:'...'
  }
}

权限过期

不管用户最后登入是在什么时间,如果应用在 90 天内未使用某项权限,则该权限将过期。即使该权限已通过应用审核并获得批准,这一点也成立。