Вопрос

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

Я объединил их так же, как описано в принятом ответе здесь:Facebook, Django и Google App Engine

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

Если вы измените строку 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. @facebook.require_login() при использовании pyfacebook с facebook-connect.Декоратор предназначен для использования в приложении Facebook, поскольку он перенаправляет пользователя на сайт Facebook, если он не вошел в систему, но вы действительно хотите перенаправить пользователя на страницу входа на свой сайт, если он не вошел в систему.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top