2010-04-28 79 views
1

http://github.com/facebook/python-sdk/blob/master/src/facebook.py,在我的畫布應用程序,我可以做以下電話讓我的access_token,這將工作,因爲我的用戶都在使用Facebook的登錄:通過Python SDK獲取Facebook OAuth access_token似乎不工作,有什麼想法?

import facebook 

myDict = facebook.get_user_from_cookie(cookies, app_id, app_secret) 
# my access_token is myDict["access_token"] 

myDict是alwas無,任何想法?

編輯:我運行在應用程序引擎上,通過「畫布」,我的意思是一個Facebook應用程序,它運行在facebook平臺內部。也就是說,它不在我的網站,iPhone或桌面應用程序上。我意識到這是由JavaScript SDK來設置cookie,但據我瞭解,如果應用程序在Facebook內運行,那麼應該已經設置好cookies。

+0

'cookies *的內容是什麼?在快速查看模塊之後,我想這取決於JavaScript SDK在客戶端設置Cookie。你在AppEngine上運行嗎?由於目前尚不清楚你的'canvas'應用程序究竟是什麼。 – 2010-04-28 06:33:37

+0

我在應用引擎上運行,通過「canvas」,我的意思是一個facebook應用程序,它運行在facebook平臺的內部。也就是說,它不在我的網站,iPhone或桌面應用程序上。 – user259349 2010-04-28 13:56:32

回答

2

爲此,您需要使用JavaScript SDK來初始化會話,在此時python-sdk能夠讀取由javascript-sdk設置的cookie。

由於您使用的是IFrame畫布,因此由facebook設置的Cookie不可讀。在python-sdk中,有一個示例appengine oauth示例,其中包含大部分需要使其工作的內容。

0

在你的Facebook應用中,進入「編輯設置」=>「遷移」並啓用「畫布會話參數」。現在您可以從請求GET參數獲取訪問令牌。然後,使用python-sdk通過訪問令牌訪問圖形API。

0

要使用跨域Cookie,您必須設置P3P策略。

爲App Engine必須設置標題:

self.response.headers['P3P']='CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"' 

,你也必須使用Facebook的Javascript SDK這樣的PARAMS:

FB.init({ 
    appId : '***********', 
    status : true, // check login status 
    cookie : true, // enable cookies to allow the server to access the session 
    xfbml : true, // parse XFBML 
    session: 'json_encoded_sessio_getted_on_backen', 
    channelUrl : location.href+'/channel.html' 
}); 

我發現,如果你在這裏沒有會話,FB會不發送cookie給你的iframe。

1

你需要有Facebook在你的HTML文件的底部的JavaScript SDK ...代碼:

<!-- loads the facebook javascript API asyncroneously and saves the token in a cookie for use in the python code --> 
    <div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
      FB.init({appId: '{{ facebook_app_id }}', status: true, cookie: true, xfbml: true}); 
     FB.Event.subscribe('auth.logout', function(response) { 
     }); 
     FB.Event.subscribe('auth.login', function(response) { 
     }); 
    }; 

    (function() { 
     var e = document.createElement('script'); 
     e.type = 'text/javascript'; 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 

然後,在你的Python處理器可以執行

cookie = facebook.get_user_from_cookie(self.request.cookies, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET) 
graph = facebook.GraphAPI(cookie["access_token"]) 
current_user = graph.get_object("me") 

這是我自己的應用程序的一個實例

相關問題