Frage

Ich versuche, ein Facebook-App App-Engine-Patch und pyFacebook zu schreiben. Ich verwende nur die Beispiele mit jedem Werkzeug und aus irgendeinem Grunde, vorausgesetzt, es wird nicht funktionieren.

Ich habe die beide ebenso wie in der akzeptierten answet kombiniert hier beschrieben: Facebook, Django und Google App Engine

app-engine-patch scheint zu funktionieren ganz gut, aber wenn ich versuche @ zu verwenden facebook.require_login () Ich bekomme diese von GAE Protokolle:

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'

Diese happends egal welche Ansicht ich dekorieren mit @ facebook.require_login ()

Ich bin mit dem neuesten aus beiden Projekten, und ich habe keine Ahnung, warum es nicht funktionieren.

Vielen Dank für Ihre Zeit.

UPDATE: habe ich einen quickfix für pyFacebook, aber ich habe vergessen, nur um es im Thread zurück zu setzen

.

Jetzt auch als eine Antwort, da es scheint die einzige Möglichkeit zu sein.

Wenn Sie ändern facebook / __ init__.py Linie 1292+ von diesem:

    if params.get('expires'):
        self.session_key_expires = int(params['expires'])

Um dies zu:

    if params.get('expires'):
        if params['expires'] == 'None':
            params['expires'] = 0   
        self.session_key_expires = int(params['expires'])

Es wird funktionieren, aber es ist ein Hack und vielleicht könnte es mehr elegant getan werden, aber es funktioniert. Muss ich Punkt der pyFacebook auf diesen Thread Devs, vielleicht werden sie eine bessere Lösung haben.

War es hilfreich?

Lösung 2

Wenn Sie ändern facebook / __ init__.py Linie 1292+ von diesem:

    if params.get('expires'):
        self.session_key_expires = int(params['expires'])

Um dies zu:

    if params.get('expires'):
        if params['expires'] == 'None':
            params['expires'] = 0   
        self.session_key_expires = int(params['expires'])

Es wird funktionieren, aber es ist ein Hack und vielleicht könnte es mehr elegant getan werden, aber es funktioniert.

Andere Tipps

Sie sollten nicht pyfacebook Dekoratorklasse @facebook.require_login() verwenden, wenn pyfacebook mit Facebook-Connect verwenden. Der Dekorateur sollte für eine Facebook-Anwendung verwendet werden, da es den Benutzer auf die Facebook-Seite umleitet, wenn sie nicht eingeloggt sind, aber Sie wirklich wollen, um den Benutzer zu Ihrer Login-Seite auf Ihrer Website umleiten, wenn sie nicht eingeloggt sind.

Um zu überprüfen, ob jemand mit Facebook-Connect und pyfacebook mit der djangofb Middleware angemeldet ist, rufen Sie request.fb.check_session(request). Wenn check_session True zurückgibt, dann haben sie eine gültige Session. Wenn es False zurückgibt, dann müssen Sie den Benutzer auf Ihre Login-Seite umleiten, damit sie den facebook connect Login-Button klicken, können Sie (sollen) auf dieser Seite platziert haben.

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