網頁版 Facebook 登入的管理權限

啟動登入對話框的最重要一個部分,是選擇您應用程式想要存取哪些資料。這些範例全部都使用了 scope 參數,您可以使用此方法要求存取某人的資料。這些參數均稱為權限

我們的權限指南中詳細講解了權限。不過,在處理權限和登入對話框時,有幾點需要記住:

  • 在建立對話框時要求權限。產生的權限組合與傳回的存取憑證相關。
  • 其他平台可能會有一組不同的權限。例如在 iOS 上,您可以要求用戶獲標註的位置,但在您應用程式的網頁版本中,此體驗無需權限。
  • 您可以在稍後需要更多功能時加入權限。在需要新權限時,您只需在已經授權的清單中加入所需權限,然後重新啟動登入對話框,登入對話框便會要求新權限。
  • 登入對話框可讓用戶拒絕與您的應用程式分享您所要求的權限。您的應用程式應該處理此情況。在權限對話框中進一步了解此情況。
  • 應用程式如要求預設欄位和 email 權限以外的資訊,則必須先經由 Facebook 審查才可向公眾發佈。如需了解詳情,請參閱我們的登入審查文件和一般審查指南

新增權限

使用 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'
  }
);

執行此操作時,登入對話框會重新要求被拒權限。此對話框的外觀與重新要求權限部分中的對話框非常相似,但可讓您重新要求被拒權限。