【问题标题】:Looping Redirect with PyFacebook and Google App Engine使用 PyFacebook 和 Google App Engine 循环重定向
【发布时间】:2010-02-27 23:28:16
【问题描述】:

我在 Google App Engine 上托管了一个 Python Facebook 项目,并使用以下代码使用 PyFacebook 处理 Facebook API 的初始化。

# Facebook Initialization
def initialize_facebook(f):

    # Redirection handler
    def redirect(self, url):
        logger.info('Redirecting the user to: ' + url)
        self.response.headers.add_header("Cache-Control", "max-age=0")
        self.response.headers.add_header("Pragma", "no-cache")
        self.response.out.write('<html><head><script>parent.location.replace(\'' + url + '\');</script></head></html>')
        return 'Moved temporarily'

    auth_token = request.params.get('auth_token', None)
    fbapi = Facebook(settings['FACEBOOK_API_KEY'], settings['FACEBOOK_SECRET_KEY'], auth_token=auth_token)

    if not fbapi:
        logger.error('Facebook failed to initialize')

    if fbapi.check_session(request) or auth_token:
        pass
    else:
        logger.info('User not logged into Facebook')
        return lambda a: redirect(a, fbapi.get_login_url())

    if fbapi.added:
        pass
    else:
        logger.info('User does not have ' + settings['FACEBOOK_APP_NAME'] + ' added')
        return lambda a: redirect(a, fbapi.get_add_url())

    # Return the validated API
    logger.info('Facebook successfully initialized')
    return lambda a: f(a, fbapi=fbapi)

我正在尝试设置它,以便我可以将此装饰器放在任何页面处理程序方法上,并验证用户是否已正确设置所有内容。问题是当重定向处理程序被调用时,它会启动一个无限循环的重定向。

我尝试使用 HTTP 302 重定向代替 JavaScript,但也一直失败。有谁知道我可以做些什么来解决这个问题?

我看到了这个similar question,但没有答案。

【问题讨论】:

  • 您是否将装饰器应用于您要重定向到的页面的处理程序?
  • 假设不适用于目标页面。目标页面应该来自 Facebook 生成的页面的 get_xxx_url() 调用。

标签: python google-app-engine redirect pyfacebook


【解决方案1】:

我今天也发生了同样的事情!我认为正在发生的是 fbapi.check_session() 没有正确设置 fbapi.add 。我认为Post-Add URL 不再包含“已安装”,但仍有“fb_sig_add”。 pyfacebook 中的以下更改(github 式代码)为我停止了无限重定向:

第1244章第1244章如果 request.method == 'POST': 第1245章第1245章参数 = self.validate_signature(request.POST) 第1246章第1246章别的: 第1247章| - 如果在 request.GET 中“安装”: |第1247章+ 如果在 request.GET 或 request.GET['fb_sig_added'] == '1' 中“安装”: 第1248章第1248章self.add = True

【讨论】:

  • 感谢弗雷泽的提示。这个问题困扰我的时间最长,直到我最终放弃并通过 pyfacebook 切换到 minifb(实际上是 gminifb blog.patrickcrosby.com/2008/04/20/…)。我发现它更容易
【解决方案2】:

这个问题似乎很熟悉。 您可以在这里使用我的问题中的解决方案吗:

app-engine-patch and pyFacebook not working

但那是 pyfacebook 附带的装饰器,所以它可能会有所不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多