app-motore-patch e pyFacebook non funziona
-
19-09-2019 - |
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.
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.