啟動登入對話框的最重要一個部分,是選擇您應用程式想要存取哪些資料。這些範例全部都使用了 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' } );
執行此操作時,登入對話框會重新要求被拒權限。此對話框的外觀與重新要求權限部分中的對話框非常相似,但可讓您重新要求被拒權限。