如何通过PyFacebook访问Facebook Connect FBML cookie?
通过Facebook Connect的FBML按钮登录后,是否可以通过PyFacebook来获取和使用会话的详细信息?我能否像通过Python登录那样使用auth.getSession()?
简单来说,我想弄清楚是否可以替换下面示例中直到raw_input()的所有步骤:
import facebook
API_KEY = 'xxx'
SECRET_KEY = 'xxx'
facebook = facebook.Facebook(API_KEY, SECRET_KEY)
facebook.auth.createToken()
facebook.login()
# Login to the window, then press enter
print 'After logging in, press enter...'
raw_input()
# This is where FBML button should get me
facebook.auth.getSession()
print 'Session Key: ', facebook.session_key
print 'Your UID: ', facebook.uid
2 个回答
0
我不太确定这是否能回答你的问题,老实说,我可能会引导你走错方向,因为我刚刚开始接触这个(大约30分钟前我用pyfacebook搭建了自己的Facebook认证后台):
首先,我安装了pyfacebook中间件(这样我就可以在任何视图中调用request.facebook):
'facebook.djangofb.FacebookMiddleware'
然后,我设置了一个视图,里面有一个Facebook连接按钮,并且配置了适当的设置,以便在授权完成后能重定向到我需要的地方。
在我的Facebook连接登录完成视图中,我通过将请求变量传递给request.facebook.check_session()来用Facebook连接的cookies进行身份验证。如果返回True,说明对象已经准备好,可以用来获取数据了。
def myview(request):
fb = request.facebook
ready_to_rock = fb.check_session(request)
if ready_to_rock:
user_info = fb.users.getInfo([fb.uid],['first_name','last_name'])
1
我在开发者维基的验证Facebook用户页面上,找到了PyFacebook中的getSession、validate_signature和getLoggedInUser这几个方法,并且还参考了PyFacebook的example.py文件中的代码,特别是针对Django的部分:
if 'session_key' in request.session and 'uid' in request.session:
fb.session_key = request.session['session_key']
fb.uid = request.session['uid']
else:
try:
fb.auth_token = request.GET['auth_token']
except KeyError:
# Send user to the Facebook to login
return HttpResponseRedirect(fb.get_login_url())
# getSession sets the session_key and uid
# Store these in the cookie so we don't have to get them again
fb.auth.getSession()
request.session['session_key'] = fb.session_key
request.session['uid'] = fb.uid
接着,我用FBML按钮在Zope3上做了一个快速测试,成功运行了:
import facebook
API_KEY = 'your_api_key'
SECRET_KEY = 'your_secret_key'
fb = odb.facebook.Facebook(API_KEY, SECRET_KEY)
fb_uid = self.request[API_KEY+'_user']
fb_session_key = self.request[API_KEY+'_session_key']
fb_ss = self.request[API_KEY+'_ss']
fb_signature = self.request[API_KEY] #no suffix for signature
fb.session_key = fb_session_key
fb.uid = fb_uid
fb.friends.get() # Results in list of friends