app-engine-patch и pyFacebook не работают - PullRequest
4 голосов
/ 11 января 2010

Я пытаюсь написать приложение для Facebook, используя app-engine-patch и pyFacebook.Я использую только примеры, предоставленные с каждым инструментом, и по какой-то причине он не будет работать.

Я соединил их так, как описано в принятом ответе: Facebook, Django и Google AppEngine

app-engine-patch работает нормально, но когда я пытаюсь использовать @ facebook.require_login (), я получаю это из журналов 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'

Это происходитнезависимо от того, какой вид я украшаю с помощью @ facebook.require_login ()

Я использую последние версии обоих проектов и не знаю, почему это не сработает.

Большое спасибо за ваше время.

ОБНОВЛЕНИЕ: Я сделал быстрое исправление для pyFacebook, но я просто забыл поместить его обратно в ветку.

Теперь также в качестве ответа, поскольку, похоже, этоЕдинственный способ.

Если вы измените facebook / __ init__.py строку 1292+ с этого:

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

На это:

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

Это будет работать, но этоэто взлом, и, возможно, это можно сделать более элегантно, но это работает.Нужно указать разработчикам pyFacebook на эту ветку, возможно, у них будет лучшее решение.

Ответы [ 2 ]

1 голос
/ 07 марта 2010

Если вы измените facebook / __ init__.py строку 1292+ из этого:

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

К этому:

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

Это будет работать, но это взлом, и, возможно, это можно сделать более элегантно, но это работает.

1 голос
/ 11 января 2010

Вы не должны использовать оформитель pyfacebook @facebook.require_login() при использовании pyfacebook с facebook-connect. Декоратор предназначен для использования в приложении facebook, так как он перенаправляет пользователя на сайт facebook, если они не вошли в систему, но вы действительно хотите перенаправить пользователя на страницу входа на своем сайте, если они не вошли в систему.

Чтобы проверить, вошел ли кто-либо с помощью facebook-connect и pyfacebook с промежуточным программным обеспечением djangofb, вы набираете request.fb.check_session(request). Если check_session возвращает True, то у них есть действительный сеанс. Если он возвращает False, вам нужно перенаправить пользователя на вашу страницу входа в систему, чтобы он мог нажать кнопку входа в Facebook, которую вы (должны) разместили на этой странице.

...