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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top