啟動「登入」對話方塊的一大重點,就是選擇您的應用程式想要存取的資料。以下範例都使用了 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
權限已從「授予」變成「拒絕」。
您可向已拒絕的用戶要求一次來授予應用程式權限。您應該顯示說明畫面,告訴用戶應該授予權限的原因,然後再次要求。但是,如果您使用上一節描述的方法,「登入」對話方塊將不會要求權限。
這是因為用戶一旦拒絕授予某權限,除非您明確告知「登入」對話方塊要再次要求某個已拒絕的權限,否則該對話方塊不會再次要求該權限。
方法是將 auth_type: rerequest
標示加入 FB.login()
呼叫:
FB.login( function(response) { console.log(response); }, { scope: 'user_likes', auth_type: 'rerequest' } );
當您這樣做時,「登入」對話方塊將會再次要求受拒權限。再次要求權限的對話方塊,看起來會很像這一節中出現的對話方塊,但是會讓您再次要求受拒權限。