我正在尝试使用 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 开发人员指向该线程,也许他们会有更好的解决方案。