我有一个托管在 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,但仍然失败。有谁知道我能做些什么来解决这个问题?

我看到了这个 类似的问题 但没有答案。

有帮助吗?

解决方案

我今天也遇到了同样的事情!我认为正在发生的事情是 fbapi.check_session() 没有正确设置 fbapi.added 。我不认为 后添加 URL 不再包含“installed”,但仍然有“fb_sig_added”。pyfacebook 中的以下更改(github 式代码)为我停止了无限重定向:

1244 | 1244 |     if request.method == 'POST':
1245 | 1245 |         params = self.validate_signature(request.POST)
1246 | 1246 |     else:
1247 |      | -       if 'installed' in request.GET:
     | 1247 | +       if 'installed' in request.GET or request.GET['fb_sig_added'] == '1':
1248 | 1248 |             self.added = True

其他提示

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

app-engine-patch 和 pyFacebook 不工作

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top