Redirecionar em loop com pyfacebook e Google App Engine
-
23-09-2019 - |
Pergunta
Eu tenho um projeto Python Facebook hospedado no Google App Engine e uso o código a seguir para lidar com a inicialização da API do Facebook usando o 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)
Estou tentando configurá -lo para poder soltar este decorador em qualquer método de manipulador de página e verificar se o usuário tem tudo configurado corretamente. A questão é que, quando o manipulador de redirecionamento é chamado, ele inicia um loop infinito de redirecionamento.
Tentei usar um redirecionamento HTTP 302 no lugar do JavaScript, mas isso continuou falhando. Alguém sabe o que posso fazer para consertar isso?
Eu vi isso pergunta semelhante Mas não há respostas.
Solução
Eu estava tendo exatamente a mesma coisa que aconteceu comigo hoje! O que eu acho que está acontecendo é que o fbapi.check_session () não está definindo o fbapi.added corretamente. Eu não acho o URL pós-ADD Contém mais 'instalado', mas ainda tem 'fb_sig_added'. A mudança a seguir (código do estilo Github) no Pyfacebook interrompeu o redirecionamento infinito para mim:
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
Outras dicas
O problema parece familiar. Que você possa usar a solução da minha pergunta aqui:
App--Engine-Patch e Pyfacebook não funcionam
Mas isso foi com o decorador que vem com Pyfacebook, para que possa ser diferente.