2010-04-28 69 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") 

这是我自己的应用程序的一个实例

相关问题