2009-10-23 54 views
1

通过Facebook Connect FBML按钮登录后,是否可以通过PyFacebook检索和使用会话详细信息?我是否可以像使用Python触发登录一样使用auth.getSession()?通过PyFacebook访问Facebook Connect FBML cookie?

基本上我试图找出是否有可能在下面的例子来代替阶段直至并包括的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 
+0

没有具体的Django或Zope的问题或答案,所以我删除了这些标签为雅。 – 2009-10-23 17:50:23

回答

1

对开发商维基我找到了使用Verifying the Facebook User页PyFacebook 的getSessionvalidate_signaturegetLoggedInUser方法而且随着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 
0

我不知道这是否回答你的问题,无可否认,我可能会被带坏你,因为我在这是新(只是用pyfacebook滚我自己的Facebook身份验证后端约30分钟前):

首先,我安装了pyfacebook中间件(让我打电话request.facebook在任何视图):

'facebook.djangofb.FacebookMiddleware' 

然后,我设置与af的看法acebook连接按钮以及相应的设置,以便在授权完成时将其重定向到我需要的位置。

在我的Facebook连接登录完成视图中,我通过将请求变量传递给request.facebook.check_session()来向Facebook以facebook连接Cookie进行身份验证。如果它返回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'])