Domanda

Sto cercando di scrivere un applicazione Facebook utilizzando app-motore-patch e pyFacebook. Sto usando nient'altro che gli esempi forniti con ogni strumento e per qualche ragione non funzionerà.

ho combinato i due proprio come descritto nel answet accettato qui: Facebook, Django, e Google App Engine

app-motore-patch sembra funzionare bene, ma quando provo ad usare @ facebook.require_login () ottengo questo da tronchi di GAE:

Exception in request:
Traceback (most recent call last):
  File "/base/data/home/apps/app-name/1.339079629847560090/common/zip-packages/django-1.1.zip/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/base/data/home/apps/app-name/1.339079629847560090/facebook/djangofb/__init__.py", line 87, in newview
    if not fb.check_session(request):
  File "/base/data/home/apps/app-name/1.339079629847560090/facebook/__init__.py", line 1293, in check_session
    self.session_key_expires = int(params['expires'])
ValueError: invalid literal for int() with base 10: 'None'

Questa happends non importa quale vista che decorare con @ facebook.require_login ()

Sto usando l'ultimo da entrambi i progetti e non ho idea del perché non funzionerà.

Molte grazie per il vostro tempo.

UPDATE: Ho fatto una QuickFix per pyFacebook, ma ho solo dimenticato di rimetterlo in discussione

.

Ora anche come una risposta, dal momento che sembra essere l'unico modo.

Se si cambia facebook / __ init__.py linea 1292+ da questo:

    if params.get('expires'):
        self.session_key_expires = int(params['expires'])

Per questo:

    if params.get('expires'):
        if params['expires'] == 'None':
            params['expires'] = 0   
        self.session_key_expires = int(params['expires'])

che funzionerà, ma è un hack e forse potrebbe essere fatto più elegante, ma funziona. Devo precisare gli sviluppatori pyFacebook a questa discussione, forse avranno una soluzione migliore.

È stato utile?

Soluzione 2

Se si cambia facebook / __ init__.py linea 1292+ da questo:

    if params.get('expires'):
        self.session_key_expires = int(params['expires'])

Per questo:

    if params.get('expires'):
        if params['expires'] == 'None':
            params['expires'] = 0   
        self.session_key_expires = int(params['expires'])

che funzionerà, ma è un hack e forse potrebbe essere fatto più elegante, ma funziona.

Altri suggerimenti

Non si deve usare decoratore @facebook.require_login() di pyfacebook quando si utilizza pyfacebook con facebook-connect. Il decoratore è destinato ad essere utilizzato per un'applicazione Facebook, come si reindirizza l'utente al sito di Facebook, se non sono connessi, ma si vuole veramente per reindirizzare l'utente alla pagina di login sul sito, se non sono registrati.

Per verificare se un utente è connesso con Facebook-connect e pyfacebook con il middleware djangofb, si chiama request.fb.check_session(request). Se check_session restituisce True poi hanno una sessione valida. Se restituisce False allora avete bisogno di reindirizzare l'utente alla pagina di login in modo che possano fare clic sul pulsante di facebook login Connect (dovrebbe) avete posto in quella pagina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top