我正在尝试使用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做了一个快速修复程序,但是我只是忘了把它放回线程中了。

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

如果您从此更改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开发人员使用此线程,也许他们会有更好的解决方案。

最佳答案

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

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

关于google-app-engine - app-engine-patch和pyFacebook无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2039366/

10-14 00:44