Question

Je suis en train d'écrire une application Facebook en utilisant app-engine-patch et pyFacebook. Je me sers rien que les exemples fournis avec chaque outil et pour une raison quelconque, il ne fonctionnera pas.

J'ai combiné les deux comme décrit dans l'ici answet accepté: Facebook, Django et Google App Engine

patch app-moteur semble fonctionner très bien, mais lorsque je tente d'utiliser @ facebook.require_login () Je reçois ce à partir des journaux de GAE:

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'

Ce happends quelle que soit la vue que je décore avec @ facebook.require_login ()

J'utilise la dernière des deux projets et je ne sais pas pourquoi il ne fonctionnera pas.

Merci beaucoup pour votre temps.

Mise à jour: J'ai fait une quickfix pour pyFacebook, mais j'oublié de le remettre dans le fil

.

Maintenant aussi comme une réponse, car il semble être la seule façon.

Si vous changez facebook / __ init__.py ligne 1292+ de ceci:

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

Pour cela:

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

Il fonctionne, mais il est un hack et peut-être il pourrait être fait avec plus d'élégance, mais cela fonctionne. Je dois pointer les devs pyFacebook à ce fil, ils ont peut-être une meilleure solution.

Était-ce utile?

La solution 2

Si vous changez facebook / __ init__.py ligne 1292+ de ceci:

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

Pour cela:

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

Il fonctionne, mais il est un hack et peut-être il pourrait être fait avec plus d'élégance, mais cela fonctionne.

Autres conseils

Vous ne devriez pas utiliser de décorateur pyfacebook de @facebook.require_login() lors de l'utilisation pyfacebook avec facebook-connexion. Le décorateur est destiné à être utilisé pour une application facebook, car il redirige l'utilisateur vers le site facebook si elles ne sont pas connectés, mais vous voulez vraiment rediriger l'utilisateur vers votre page de connexion sur votre site s'ils ne sont pas connectés.

Pour vérifier si quelqu'un est connecté avec facebook-connecter et pyfacebook avec le middleware djangofb, vous appelez request.fb.check_session(request). Si check_session retourne vrai alors ils ont une session valide. Si elle retourne false alors vous devez rediriger l'utilisateur vers votre page de connexion afin qu'ils peuvent cliquer sur le bouton de connexion facebook login vous (si) avez placé sur cette page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top