Domanda

È possibile, dopo aver effettuato l'accesso tramite un pulsante FBML di Facebook Connect, recuperare e utilizzare i dettagli della sessione tramite PyFacebook ? Posso usare auth.getSession () come se avessi licenziato il login tramite Python?

Fondamentalmente sto cercando di capire se è possibile sostituire le fasi fino a raw_input incluso () nell'esempio seguente:

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
È stato utile?

Soluzione

Uso della Verifica dell'utente di Facebook sulla wiki dello sviluppatore che ho tracciato giù i metodi PemFacebook getSession , validate_signature e getLoggedInUser e insieme al codice trovato nell'esempio.py di PyFacebook per 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

Ho ottenuto il seguente test rapido per Zope3 funzionante usando il pulsante 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

Altri suggerimenti

Non sono sicuro che questo risponda alla tua domanda e, ammetto, potrei smarrirti perché sono nuovo in questo (ho appena rotolato il mio backend di autenticazione di Facebook usando pyfacebook circa 30 minuti fa):

Per prima cosa, ho installato il middleware pyfacebook (permettendomi di chiamare request.facebook in qualsiasi vista):

'facebook.djangofb.FacebookMiddleware'

Quindi, ho impostato una vista con un pulsante di connessione di Facebook e le impostazioni appropriate per reindirizzare dove ho bisogno al completamento dell'autorizzazione.

Nella mia vista di accesso di Facebook Connect eseguita, eseguo l'autenticazione su Facebook con i cookie di Facebook Connect passando la variabile di richiesta a request.facebook.check_session (). Se restituisce True, l'oggetto è pronto per essere utilizzato per recuperare i dati.

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'])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top