app-engine-patch和pyFacebook不能正常工作

时间:2010-01-11 01:04:50

标签: google-app-engine pyfacebook

我正在尝试使用app-engine-patch和pyFacebook编写一个facebook应用程序。 我只使用每个工具提供的示例,但由于某种原因它不起作用。

我已按照接受的答案中的说明将两者结合起来: Facebook, Django, and 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做了一个quickfix,但我忘了把它放回到帖子中。

现在也作为答案,因为它似乎是唯一的方法。

如果您更改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 devs到这个主题,也许他们会有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

在使用pyfacebook和facebook-connect时,不应该使用pyfacebook的装饰器@facebook.require_login()。装饰器用于Facebook应用程序,因为如果用户没有登录,它会将用户重定向到Facebook站点,但是如果他们没有登录,你真的想要将用户重定向到你站点上的登录页面。

要检查某人是否使用djangofb中间件登录facebook-connect和pyfacebook,请致电request.fb.check_session(request)。如果check_session返回True,则它们具有有效会话。如果它返回False,那么您需要将用户重定向到您的登录页面,以便他们可以单击您(应该)放在该页面上的Facebook连接登录按钮。

答案 1 :(得分:1)

如果您更改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'])

它会起作用,但这是一个黑客,也许它可以更优雅地完成,但它确实有效。