app-engine-patch y pyFacebook no funciona
-
19-09-2019 - |
Pregunta
Estoy intentando escribir una aplicación de Facebook usando app-engine-patch y pyFacebook. Estoy usando nada más que los ejemplos que se proporcionan con cada herramienta y por alguna razón no va a funcionar.
he combinado los dos del mismo modo descrito en el answet aceptado aquí: Facebook, Django y Google App Engine
app-engine-patch parece que funciona muy bien, pero cuando trato de usar @ facebook.require_login () me sale esto a partir de troncos de 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'
Esta happends no importa qué punto de vista I decorar con @ facebook.require_login ()
Estoy usando lo último de ambos proyectos y no tengo ni idea de por qué no lo puedo trabajar.
Muchas gracias por su tiempo.
ACTUALIZACIÓN: Me hizo una quickfix para pyFacebook, pero simplemente se olvidó de poner de nuevo en el hilo
.Ahora también como una respuesta, ya que parece ser la única manera.
Si cambia facebook / __ init__.py línea 1292+ de esto:
if params.get('expires'):
self.session_key_expires = int(params['expires'])
A esto:
if params.get('expires'):
if params['expires'] == 'None':
params['expires'] = 0
self.session_key_expires = int(params['expires'])
Esto funciona, pero es un truco y tal vez se podría hacer más elegante, pero funciona. Tengo que señalar los desarrolladores pyFacebook a este tema, tal vez ellos tendrán una mejor solución.
Solución 2
Si cambia facebook / __ init__.py línea 1292+ de esto:
if params.get('expires'):
self.session_key_expires = int(params['expires'])
A esto:
if params.get('expires'):
if params['expires'] == 'None':
params['expires'] = 0
self.session_key_expires = int(params['expires'])
Esto funciona, pero es un truco y tal vez se podría hacer más elegante, pero funciona.
Otros consejos
No use @facebook.require_login()
decorador de pyfacebook cuando se utiliza con facebook pyfacebook de conexión. El decorador está destinado a ser utilizado para una aplicación de Facebook, ya que redirige al usuario a la página de facebook si no se registran en, pero que realmente quiere redirigir al usuario a la página de inicio de sesión en su sitio si no están conectados.
Para comprobar si alguien está conectado con facebook-conectar y pyfacebook con el middleware djangofb, se llama a request.fb.check_session(request)
. Si check_session
devuelve True entonces tienen una sesión válida. Si devuelve Falso, entonces usted necesita para redirigir al usuario a la página de inicio de sesión para que puedan hacer clic en el botón de Facebook Connect inicio de sesión que (debe) ha colocado en esa página.