2009-01-27 117 views
3

我正在致力於一個Facebook應用程序,並且我只是不瞭解他們的授權系統如何工作。Facebook授權問題

我們的基本設置是這樣的

帆布URL = domain.com/facebook

這是一個指向domain.com/facebook/app這是一個HTML頁面的FBML iframe元素一個簡單的頁面提供Flash應用程序。

Flash應用程序從我們的應用程序服務器請求額外的數據 - 這些請求中的一些請求facebook數據(例如朋友ID列表)。

So Flash然後向domain.com/resources/facebook/friends發出一個請求 - 這是一個PHP頁面,它創建一個Facebook實例(它們的PHP庫),並執行對其API的必要調用並返回數據。

但是,請求該URL(快速)不驗證,所以然後被重定向到其登錄時,然後將自身重定向回我的畫布網址有兩個參數 - AUTH_TOKEN下一個。所以請求是有效的,但是重定向打斷了Flash呼叫。

所以,我想弄清楚如何讓這些其他API調用(當他們自己的facebook應用程序調用時)從開始的facebook-vaildated。

回答

1

好吧,我想通了。

事實證明,閃光已經跟隨重定向 - 所有我需要做的是檢測(在畫布URL)時有授權請求和(由AUTH_TOKEN下一個存在說明)當我重定向到下一個URL(基本上,將auth_token轉發到原始請求)時,包括 auth_token作爲GET參數。

因此,與我上面所說的相反,重定向不會中斷Flash調用 - 它只是沒有足夠的數據成爲有效的請求。

1

通過將下面的代碼,而不是 「require_login()」 行

if (isset($_GET['auth_token'])) { 
$sess_data=$facebook->api_client->call_method('auth.getSession',array('auth_token'=>$_GET['auth_token'])); 
$facebook->set_user($sess_data['uid'],$sess_data['session_key'],$sess_data['expires']); 
$user=$sess_data['uid']; 
} 
if (!$sess_data) { 
$user=$facebook->require_login(); 
} 
解決