¿Accediendo a la cookie FBML de Facebook Connect a través de PyFacebook?
Pregunta
Es posible, después de iniciar sesión a través de un botón FBML de Facebook Connect, recuperar y usar los detalles de la sesión a través de PyFacebook ? ¿Puedo usar auth.getSession () de la misma manera que si hubiera disparado el inicio de sesión a través de Python?
Básicamente, estoy intentando resolver si es posible reemplazar las etapas hasta e incluyendo raw_input () en el siguiente ejemplo:
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
Solución
Usando la página Verificando el usuario de Facebook en la wiki del desarrollador. baje los métodos PyFacebook getSession , validate_signature y getLoggedInUser y junto con el código que se encuentra en example.py de PyFacebook para 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
Obtuve la siguiente prueba rápida para que Zope3 funcione con el botón FBML:
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
Otros consejos
No estoy seguro de que esto responda a tu pregunta y, debo admitirlo, puedo estar desviándote de ti porque soy nuevo en esto (solo hice mi propia cuenta de Facebook con Pyfacebook hace unos 30 minutos):
Primero, instalé el middleware de pyfacebook (permitiéndome llamar request.facebook en cualquier vista):
'facebook.djangofb.FacebookMiddleware'
Luego, configuro una vista con un botón de conexión de Facebook y la configuración adecuada para que redirija a donde lo necesito al completar la autorización.
En la vista de inicio de sesión de Facebook Connect, me autentico en Facebook con las cookies de Facebook conectando la variable de solicitud a request.facebook.check_session (). Si devuelve True, el objeto está listo para ser usado para recuperar datos.
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'])