2011-05-27 37 views
5

我想驗證我的臉書個人資料與我的網站,所以我可以拉從頁面的信息。 我被建議一次通過臨時頁面與facebook api進行身份驗證。有點像:一次性認證的網絡鏈接與Facebook應用程序

<fb:login-button params="some permission" /> 

我是新來的編碼facebook應用程序。但這看起來像fbml。我如何使用它來通過我自己的配置文件來認證我的網站。我不需要用戶登錄到我的網站。我只需要從我的頁面中提取信息。

Facebook的文檔是稀疏和分片。我所有的登錄是這段代碼片段。我不明白我怎麼可以通過這種方法驗證一個網絡鏈接。

FB.login(function(response) { 
    if (response.session) { 
    // user successfully logged in 
    } else { 
    // user cancelled login 
    } 
}); 

任何人都可以拋出一些光?

回答

5

讓我們從beggining開始:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en"> 

它需要FBML工作。下一步:

<fb:login-button autologoutlink="true"></fb:login-button> 
<div id="fb-root"></div> 

這兩行創建「Facebook登錄按鈕」,你應該把它們放在你想要按鈕出現的html中。

權之前,你的結束標記附加:

<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script> 
<script> 
    window.fbAsyncInit = function() { 
     FB.init({appId: 'YOUR APP ID HERE', status: true, cookie: true, xfbml: true}); 

     FB.Event.subscribe("auth.login", function(response) { 

      if(response.session) {      
         // this is where you handle facebook's response 
      } 

     }); 

    }; 

</script> 

你在做什麼在這裏首先初始化給Facebook的連接,您的應用程序ID(您需要創建一個應用程序),並註冊了「AUTH .login「事件。每次您點擊Facebook登錄按鈕併成功登錄Facebook時,auth.login事件都會觸發,或者Facebook會根據自己的Cookie自動登錄您。

你可以找到auth.login和其他事件的解釋here,看左邊的邊欄,列出所有的事件。

的響應是JSON格式的,它包含了你的基本會話信息:

{ 
    status: 'connected', 
    session: { 
     access_token: '...', 
     expires:'...', 
     secret:'...', 
     session_key:'...', 
     sig:'...', 
     uid:'...' 
    } 
} 

你可以閱讀更多關於它here。如果你的狀態確實是「連接」的,那麼下一個最重要的信息就是uid,這是你唯一的facebook標識符,你可以向Facebook發送更多的請求。你所做的迴應取決於你。一個明顯的選擇是將它通過ajax發送給腳本,將腳本記錄到應用程序中。

要從Facebook獲取更多信息,您需要下載php sdk。使用SDK:

<?php 

include_once "facebook-sdk-3.0.0/src/facebook.php"; 

$appID  = "YOUR APP ID"; 
$appSecret = "YOUR APP SECRET"; 

$cookie = "fbs_{$appID}"; 
$cookie = isset($_COOKIE[$cookie]) ? trim($_COOKIE[$cookie], '"') : ""; 

if(empty($cookie)) { 
    echo "no facebook cookie"; 
    die(); 
} 

parse_str($cookie, $data); 

$facebook = new Facebook(array(
    "appId" => $appID, 
    "secret" => $appSecret, 
    "cookie" => true   
));   

$facebook->setAccessToken($data["access_token"]); 

$user = $facebook->getUser(); 

$profile = $facebook->api("/me"); 

?> 

所以剛開始你解析它被命名爲「fbs_YOUR_APP_ID」,幷包含會話信息(URL編碼)的Facebook的cookie。您實際需要的是access_token(經過身份驗證的會話的唯一標識符),該名稱在之前也返回給JSON響應對象。然後通過你可以做的Facebook對象和你想要的api requests

現在有一個完整的身份驗證機制,您應該創建一個類似的連接腳本,而不是從cookie獲取會話信息,它應該從發生auth.login(可能通過ajax)時返回的響應對象中獲取它們。

您應該閱讀Authentication workflow文檔以更好地瞭解Facebook連接的工作原理。

+0

這將是我的網站一次性解決方案。我不希望我的網頁的訪客不得不允許任何Facebook的權限。我甚至不想要他們登錄到Facebook .. – amit 2011-05-30 08:09:27

+0

是的,不幸的是,如果它只有你將被認證,沒有區別。你將不得不實現認證才能工作的所有結構。您將不得不通過Facebook登錄並允許您的應用程序使用您的數據,但Facebook無法確定您是否真的有人或試圖訪問您的應用程序。 – yannis 2011-05-30 08:18:11

+0

我可以實現上面的結構。但我的網站的用戶還需要認證? – amit 2011-05-30 09:30:34

2

一個處理Facebook身份驗證的好方法是使用Facebook PHP SDK(see on github)實現服務器端流程。所以,你會碰到這樣的:如果用戶登錄

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

,然後$user是他的Facebook ID。然後,您可以通過進行API調用來檢查,如果你有一個有效的訪問令牌:

  • 如果不提高任何異常,那麼你有一個有效的訪問令牌

  • 如果是這樣的話,你必須重新認證用戶。

這裏:

if ($user) { 
    try { 
    $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    $user = null; 
    } 
} 

你需要再顯示登錄或註銷鏈接:

<?php if ($user): ?> 
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a> 
<?php else: ?> 
    <a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a> 
<?php endif ?> 

當用戶登錄,你有一個有效的訪問令牌,你可以使API調用以從Facebook獲取數據:

$user_profile = $facebook->api('/me'); 

您可能需要檢查有充分記錄的example page of the Facebook PHP SDK

希望有所幫助。