Un bucle de redireccionamiento con PyFacebook y Google App Engine
-
23-09-2019 - |
Pregunta
Tengo un proyecto de Python Facebook alojado en Google App Engine y utilizar el siguiente código de inicialización mango de la API de Facebook usando PyFacebook.
# Facebook Initialization
def initialize_facebook(f):
# Redirection handler
def redirect(self, url):
logger.info('Redirecting the user to: ' + url)
self.response.headers.add_header("Cache-Control", "max-age=0")
self.response.headers.add_header("Pragma", "no-cache")
self.response.out.write('<html><head><script>parent.location.replace(\'' + url + '\');</script></head></html>')
return 'Moved temporarily'
auth_token = request.params.get('auth_token', None)
fbapi = Facebook(settings['FACEBOOK_API_KEY'], settings['FACEBOOK_SECRET_KEY'], auth_token=auth_token)
if not fbapi:
logger.error('Facebook failed to initialize')
if fbapi.check_session(request) or auth_token:
pass
else:
logger.info('User not logged into Facebook')
return lambda a: redirect(a, fbapi.get_login_url())
if fbapi.added:
pass
else:
logger.info('User does not have ' + settings['FACEBOOK_APP_NAME'] + ' added')
return lambda a: redirect(a, fbapi.get_add_url())
# Return the validated API
logger.info('Facebook successfully initialized')
return lambda a: f(a, fbapi=fbapi)
Estoy tratando de configurarlo para que pueda dejar este decorador en cualquier método manejador de la página y verificar que el usuario ha configurado todo correctamente. La cuestión es que cuando el manejador de redirección se llama, se inicia un bucle infinito de cambio de dirección.
He intentado utilizar un HTTP 302 redirección en lugar de la de javascript pero que seguía fallando también. ¿Alguien sabe qué puedo hacer para solucionar este problema?
vi esta pregunta similar pero no hay respuestas.
Solución
Estaba teniendo exactamente lo mismo suceda a mí hoy! Lo que creo que está sucediendo es que fbapi.check_session () no se ajuste fbapi.added correctamente. No creo que la href="http://wiki.developers.facebook.com/index.php/Post-Add_URL" rel="nofollow noreferrer"> Post-Add URL contiene 'instalado' más, pero todavía tiene 'fb_sig_added'. El siguiente cambio (código de github-esque) en pyfacebook detuvo el redireccionamiento infinito para mí:
1244 | 1244 | if request.method == 'POST': 1245 | 1245 | params = self.validate_signature(request.POST) 1246 | 1246 | else: 1247 | | - if 'installed' in request.GET: | 1247 | + if 'installed' in request.GET or request.GET['fb_sig_added'] == '1': 1248 | 1248 | self.added = True
Otros consejos
El problema parece familiar. Puede usted puede utilizar la solución de mi pregunta aquí:
app-engine-patch y pyFacebook no trabajar
Pero eso fue con el decorador que viene con pyfacebook por lo que podría ser diferente.