Looping Redirect mit PyFacebook und Google App Engine
-
23-09-2019 - |
Frage
Ich habe ein Python-Facebook-Projekt auf Google App Engine gehostet und verwenden Sie den folgenden Code Handle Initialisierung der Facebook-API 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)
Ich versuche, es so einzurichten, dass ich diesen Dekorateur auf einer beliebigen Seite Handler-Methode ablegen können und sicherstellen, dass der Benutzer alles richtig eingerichtet hat. Das Problem ist, dass, wenn die Umleitung Handler aufgerufen wird, startet es eine Endlosschleife der Umleitung.
Ich habe versucht, eine HTTP-Umleitung 302 anstelle des JavaScript verwenden, aber das hielt zu versagen. Weiß jemand, was ich kann, dies zu beheben tun?
Ich sah dieses
Lösung Ich habe gerade die genau die gleiche Sache heute mir passieren! Was ich denke, passiert ist, dass fbapi.check_session () setzt nicht korrekt fbapi.added. Ich glaube nicht, die Post-Add URL enthält 'installiert' mehr, aber immer noch ‚fb_sig_added‘ hat. Die folgende Änderung (Github-esque-Code) in pyfacebook für mich die unendliche Umleitung beendet: 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
Andere Tipps
Das Problem scheint vertraut. Können Sie die Lösung aus meiner Frage hier verwenden können:
app-engine-patch und pyFacebook funktioniert nicht
Aber das mit dem Dekorateur war, die mit pyfacebook kommt, so dass es anders sein könnte.