2011-07-31 86 views
1

我正在爲活動構建一個小網站。這個想法是將來自facebook活動的參加者添加到本網站。問題在於參加的服務需要access_token。我不希望用戶登錄到應用程序,我只想使用應用程序access_token。但這似乎並不奏效。Facebook access_token無效

我對收到的的access_token下面的PHP代碼:

 
// get facebook auth_token 
$FB_APP_ID = '****'; 
$FB_APP_SECRET = '***'; 
$token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $FB_APP_ID . "&client_secret=" . $FB_APP_SECRET . "&grant_type=client_credentials"; 
$app_token = file_get_contents($token_url); 
parse_str($app_token); // creates: $access_token 

在javascript中我使用下面的代碼:

/** 
* Gets all the attending Users 
* @param function callback: the function to call, when data loading is ready 
* @param function callback: the function to call, when data loading is broken 
* @return void 
*/ 
this.getAttending = function(callback, errorHandler) 
{ 
    FB.api('/' + this.eventId + '/attending', function(response) { 
     if(response.error) { 
      errorHandler(response.error['message']); 
     } else { 
      callback(response.data); 
     } 
    } , {access_token: facebook.accessToken});  
} 

我收到錯誤: 無效OAuth訪問令牌。

訪問令牌的樣子: 111737995591905 | l9e3niEMM1RsIUhwHZv3pn3c19M

用戶訪問令牌的樣子: 145634995501895 | 2.AQBcWfbvdzhloLYc.3600.1312138800.1-1146858041 | cjCkHZqquyyFyX2dY0q2YCaSyy0

當我嘗試使用用戶訪問令牌,一切工作正常。但是,當我硬編碼令牌時,這不適用於其他用戶。當我嘗試服務器爲我解析的令牌時,我會收到無效的令牌操作。有人知道這個解決方案嗎? 這是一個公共活動,我不希望用戶在他/她知道誰參加之前登錄?

這可能嗎? Thanx!

回答

0

您是否在硬編碼時編碼了令牌? |應該是%7C。 不能想到現在可能已經出錯的任何其他東西

+0

我沒有編碼access_token。這不應該是需要的,因爲我使用javascript API調用webservice,而不是使用URL。這也是我的問題:我試圖將expires查詢變量放在access_token後面。可能這被解碼並返回到一個無效的access_token。它似乎與短access_token現在工作。 – VeeWee

0

爲什麼不爲自己獲取訪問令牌,然後在您的應用程序中使用硬編碼(假設它在沒有其他人可以竊取憑據的安全服務器上運行)。然後,訪問該頁面的任何人都可以使用您自己的訪問令牌來查看訪客列表,該訪問令牌有權查看列表。

client_credentials授予類型不適用於訪問用戶數據,只適用於應用程序數據。我不知道應用程序的其餘部分如何工作,但我假設您需要用戶訪問令牌來查看用戶數據。

+0

由於access_token具有到期日期。目前我選擇了JavaScript解決方案,因爲它加載了異步信息。所以訪問令牌將不在安全的環境中。我不想要用戶憑據。我只想展示出席人員的照片。這是一個簡單的活動網站,所以不需要讓應用程序請求用戶權限。只需要公共事件數據。 – VeeWee

+0

構建一個提供列表的單個API端點而不公開您的訪問令牌非常簡單。 –

0

我得到的方式是指定offline_access權限,它會生成一個永不過期的訪問令牌,因此您可以無限期地使用它。那麼理論上你只會授權你的Facebook賬號從中獲取事件數據。然後,您可以查看並向您的網站提供您的活動詳情。

+0

這是一個很髒的問題:每個人都會使用我的access_token。每個人都可以看到它。我不知道這是否會損害我的帳戶,但我不喜歡這種解決方案。我找到了解決方案(請看上面)。感謝名單反正:) – VeeWee

+0

只要你定義要授予(IE事件)的應用程序訪問其他哪些權限,那麼只要你不介意的人能夠看到你參加什麼活動(我可以看到爲什麼這個可能是一個安全問題),那通常不是問題。在我使用這個的情況下,這是一個公開可見的頁面,不會隱藏任何人的內容,所以你可以看到,這不是一個真正的問題。很高興你找到了解決辦法! – Xenology