利用 JavaScript SDK 部署網頁版“Facebook 登錄”


facebook開發者平台https://developers.facebook.com/ 

利用 JavaScript SDK 部署網頁版“Facebook 登錄”

通過采用 Javascript 版 Facebook SDK 的“Facebook 登錄”,用戶可以使用 Facebook 憑據登錄您的網頁。即使您因為一些原因而無法使用我們的 JavaScript SDK,也一樣可以實施“Facebook 登錄”。 要在不使用 JavaScript SDK 的情況下實施“Facebook 登錄”,請參閱手動構建登錄流程。

要在不使用 JavaScript SDK 的情況下實施“Facebook 登錄”,您首先需要有一個 Facebook 應用編號。該編號可以在應用面板中創建和檢索。您還需要有一個托管 HTML 文件的位置。

按照以下步驟實施登錄:

  1. 檢查登錄狀態,了解用戶是否已登錄您的應用。 執行此步驟期間,您還應該檢查用戶是否在之前登錄過您的應用,但目前未登錄。
  2. 通過“登錄”按鈕或“登錄”對話框讓用戶登錄,並請求一系列數據權限。
  3. 讓用戶退出

另請參閱本主題末尾的完整代碼示例。

1.檢查登錄狀態

加載網頁時應采取的第一步是檢查用戶是否已使用 Facebook 登錄功能登錄您的應用。 調用 FB.getLoginStatus 即可開始此流程。 此函數會觸發 Facebook 調用,獲取登錄狀態,並調用包含結果的回調函數。

下面是取自上述示例代碼的部分代碼,在頁面加載期間運行以檢查用戶登錄狀態:

FB.getLoginStatus(function(response) {
    statusChangeCallback(response);
});

 

提供給回調的 response 對象包括許多字段:

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

 

status 表示應用用戶的登錄狀態。狀態可以是以下某個值:

  • connected。用戶登錄了 Facebook 和您的應用。
  • not_authorized。用戶登錄了 Facebook,但未登錄您的應用。
  • unknown。用戶未登錄 Facebook,所以無法知道他們是否登錄了您的應用。或者已經調用 FB.logout(),因此無法連接至 Facebook。
  • 如果狀態為  authResponse,則響應對象將包括  connected,分為以下部分:
  • accessToken。包括應用用戶的訪問口令。
  • expiresIn。表示口令到期且需要更新的 UNIX 時間。
  • signedRequest。經簽名的參數,其中包括應用用戶的信息。
  • userID 是應用用戶的編號。

知道用戶的登錄狀態后,應用就可以執行以下操作之一:

  • 如果用戶登錄了 Facebook 和您的應用,可將他們重定向至應用的登錄后體驗。
  • 如果用戶未登錄您的應用,或未登錄 Facebook,則可以通過  FB.login()呈現“登錄”對話框提示他們登錄,或展示“登錄”按鈕。
 

2.讓用戶登錄

如果使用應用的用戶未登錄應用,或未登錄 Facebook,則可以使用“登錄”對話框提示他們登錄應用和 Facebook 兩者。各種版本的對話框見下文。

如果用戶未登錄 Facebook,系統就會提示他們首先登錄 Facebook,然后再登錄您的應用。JavaScript SDK 會自動檢測這種情況,您無需執行任何額外的操作即可啟用此行為。

下面是提示用戶登錄的兩種方式:

  • 使用“登錄”按鈕。
  • 使用 JavaScript SDK 中的  FB.login()

A.讓用戶通過“登錄”按鈕登錄

您可以輕松地在自己的頁面中添加“登錄”按鈕。 有關自定義“登錄”按鈕的信息,請參閱“登錄”按鈕。要獲取基礎按鈕的代碼,在以下配置器中輸入所需的值,並點擊獲取代碼

插件配置器

最大照片行數
按鈕大小
medium
 
獲取代碼
 

注意,在本主題末尾的示例中,我們使用按鈕的 onlogin 屬性設置了一個 JavaScript 回調,用於檢查登錄狀態,了解用戶是否成功登錄:

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
</fb:login-button>

 

回調如下所示。 它將調用 FB.getLoginStatus() 來獲取最新的登錄狀態。(statusChangeCallback() 是一個函數,屬於處理響應的示例的一部分。)

function checkLoginState() {
  FB.getLoginStatus(function(response) {
    statusChangeCallback(response);
  });
}

 

B.讓用戶通過從 JavaScript SDK 調用的“登錄”對話框登錄

對於想要使用專屬按鈕的應用,您只需調用 FB.login(),即可調用“登錄”對話框:

FB.login(function(response){
  // Handle the response object, like in statusChangeCallback() in our demo
  // code.
});

 

正如參考文檔所述,此函數會生成一個展示“登錄”對話框的彈窗,所以應只在用戶點擊 HTML 按鈕后調用此函數(這樣可以防止彈窗被瀏覽器阻止)。

還可以選擇隨此函數調用傳遞可選的 scope 參數,此參數是要向應用用戶請求的一系列以逗號分隔的權限。 以下是調用包含 FB.login()(與“登錄”按鈕中使用的相同)的 scope 的方法。 在本示例中,請求的是用戶的電子郵箱和也在使用應用的好友列表:

FB.login(function(response) {
  // handle the response
}, {scope: 'public_profile,email'});

 

處理“登錄”對話框響應

在登錄流程的這一階段,您的應用會展示“登錄”對話框,用戶可以選擇是取消登錄還是允許應用訪問他們的數據。

無論用戶的選擇是什么,瀏覽器都會返回給應用,表明用戶是連接還是取消狀態的響應數據會發送到應用。當為應用使用 JavaScript SDK 時,會向調用 FB.login() 時指定的回調返回 authResponse 對象:

此響應可在 FB.login 調用內檢測和處理,如下所示:

FB.login(function(response) {
  if (response.status === 'connected') {
    // Logged into your app and Facebook.
  } else if (response.status === 'not_authorized') {
    // The person is logged into Facebook, but not your app.
  } else {
    // The person is not logged into Facebook, so we're not sure if
    // they are logged into this app or not.
  }
});

 

3.讓用戶退出

您可以向按鈕或鏈接添加 JavaScript SDK 函數 FB.logout,讓用戶可以退出應用,如下所示:

FB.logout(function(response) {
   // Person is now logged out
});

 

注意: 調用此函數還可能會讓用戶退出 Facebook。 請考慮下列 3 種情形:

  1. 用戶先登錄 Facebook,然后再登錄您的應用。當用戶退出您的應用時,他的 Facebook 帳戶仍為登錄狀態。
  2. 用戶登錄您的應用,並在該登錄流程中登錄 Facebook。當該用戶退出您的應用時,同時也將退出 Facebook。
  3. 用戶登錄了另一應用,並在該應用的登錄流程中登錄 Facebook,然后再登錄您的應用。當該用戶退出任一應用時,同時也將退出 Facebook。

此外,退出與撤銷登錄權限(刪除之前認可的驗證)不同,撤銷登錄權限可單獨執行。因此,構建應用時,不能設置為自動強制已退出的用戶返回“登錄”對話框。

 

完整代碼示例

下面的代碼會在 HTML 頁面中加載和初始化 JavaScript SDK。在指示的地方添加您的應用編號。

<!DOCTYPE html>
<html>
<head>
<title>Facebook Login JavaScript Example</title>
<meta charset="UTF-8">
</head>
<body>
<script>
  // This is called with the results from from FB.getLoginStatus().
  function statusChangeCallback(response) {
    console.log('statusChangeCallback');
    console.log(response);
    // The response object is returned with a status field that lets the
    // app know the current login status of the person.
    // Full docs on the response object can be found in the documentation
    // for FB.getLoginStatus().
    if (response.status === 'connected') {
      // Logged into your app and Facebook.
      testAPI();
    } else if (response.status === 'not_authorized') {
      // The person is logged into Facebook, but not your app.
      document.getElementById('status').innerHTML = 'Please log ' +
        'into this app.';
    } else {
      // The person is not logged into Facebook, so we're not sure if
      // they are logged into this app or not.
      document.getElementById('status').innerHTML = 'Please log ' +
        'into Facebook.';
    }
  }

  // This function is called when someone finishes with the Login
  // Button.  See the onlogin handler attached to it in the sample
  // code below.
  function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }

  window.fbAsyncInit = function() {
  FB.init({
    appId      : '{your-app-id}',
    cookie     : true,  // enable cookies to allow the server to access 
                        // the session
    xfbml      : true,  // parse social plugins on this page
    version    : 'v2.8' // use graph api version 2.8
  });

  // Now that we've initialized the JavaScript SDK, we call 
  // FB.getLoginStatus().  This function gets the state of the
  // person visiting this page and can return one of three states to
  // the callback you provide.  They can be:
  //
  // 1. Logged into your app ('connected')
  // 2. Logged into Facebook, but not your app ('not_authorized')
  // 3. Not logged into Facebook and can't tell if they are logged into
  //    your app or not.
  //
  // These three cases are handled in the callback function.

  FB.getLoginStatus(function(response) {
    statusChangeCallback(response);
  });

  };

  // Load the SDK asynchronously
  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));

  // Here we run a very simple test of the Graph API after login is
  // successful.  See statusChangeCallback() for when this call is made.
  function testAPI() {
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function(response) {
      console.log('Successful login for: ' + response.name);
      document.getElementById('status').innerHTML =
        'Thanks for logging in, ' + response.name + '!';
    });
  }
</script>

<!--
  Below we include the Login Button social plugin. This button uses
  the JavaScript SDK to present a graphical Login button that triggers
  the FB.login() function when clicked.
-->

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
</fb:login-button>

<div id="status">
</div>

</body>
</html>

 

現在,您可以前往上傳此 HTML 的網址測試應用。打開 JavaScript 控制台,您就會看見控制台日志中的 testAPI() 函數顯示包括您姓名的消息。

恭喜,您已經實際創建了一個包含“Facebook 登錄”的真實基本頁面。您可以將此頁面用作應用的起點,但請繼續閱讀下文,了解上述代碼的具體作用,這將為您帶來巨大幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM