4

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

我已经将两者结合起来,就像这里接受的回答中描述的那样: 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'])

它会起作用,但它是一个 hack,也许它可以做得更优雅,但它确实有效。必须将 pyFacebook 开发人员指向该线程,也许他们会有更好的解决方案。

4

2 回答 2

1

@facebook.require_login()将 pyfacebook 与 facebook-connect 一起使用时,不应使用 pyfacebook 的装饰器。装饰器旨在用于 facebook 应用程序,因为如果用户未登录,它会将用户重定向到 facebook 站点,但如果用户未登录,您确实希望将用户重定向到您站点上的登录页面。

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

于 2010-01-11T05:07:51.917 回答
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'])

它会起作用,但它是一个 hack,也许它可以做得更优雅,但它确实有效。

于 2010-03-06T22:22:17.270 回答