0

Facebook Oauth Documentation所述,爲了在桌面應用程序中使用客戶端流程,需要使用特殊的return_uri https://www.facebook.com/connect/login_success.htmlChrome擴展程序:帶有手動檢索訪問令牌的Facebook OAuth?

打開Chrome的新標籤來

https://www.facebook.com/dialog/oauth?client_id=MYAPPID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token

作品如預期的網址,我重定向到login_success頁面包含了記號的access_token參數。我可以使用簡單的GET請求(例如,使用jQuery)從圖形API請求數據:

$.getJSON("https://graph.facebook.com/me", {access_token : token}, function (d) 
    { 
    .. process returned data 
    }); 

我的問題是,我可以繼續使用該SDK的內部授權的方法來使用JavaScript SDK 沒有

FB.getLoginStatus返回一個錯誤,表明我的Connect/Canvas URI不正確。我該如何檢查令牌狀態而不使用該方法[除了手動獲取和響應匹配]?

FB.login明顯失敗,出現以下錯誤:

API Error Code: 191

API Error Description: The specified URL is not owned by the application

Error Message: Invalid redirect_uri

(網址不符合在應用程序的配置域網址),因爲似乎沒有辦法在內部指定上述return_uri。

在外部訪問令牌時,仍然有依賴JavaScript SDK(特別是事件)的方式嗎?我應該重寫訪問令牌嗎?

回答

1

是的,你可以用它進行正常的事件(即,用戶點擊一個按鈕一樣),象這樣:

<div id="fb-root"></div> 
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js#xfbml=1" id="facebook-jssdk"></script> 
<script type="text/javascript"> 
    FB.Event.subscribe('edge.create', 
     function(response) { 
      console.log(response); 
     } 
    ); 
</script> 

不幸的是,常規API調用你不能從您的擴展中使用Facebook的JS SDK 。你將不得不推出你自己的API包裝。

查看訪問令牌是否有效的簡單方法是使用已保存的訪問令牌對/ me?fields = id進行圖API調用。這將很快,您可以使用該響應來查看訪問令牌是否仍然有效。擴展的最佳做法是請求許可offline_access

此外,我建議讓重定向URI位於您擁有的域上。這樣,如果其他擴展程序執行相同的操作,則腳本不會發生干擾。訪問令牌將是相同的。

+0

AFAIK Facebook正在計劃讓所有access_tokens都很快長壽,因此您不必要求offline_access – zachallia