代码之家  ›  专栏  ›  技术社区  ›  Nick Gotch

使用PyFacebook和Google应用程序引擎循环重定向

  •  1
  • Nick Gotch  · 技术社区  · 15 年前

    # 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)
    

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

    我尝试使用HTTP302重定向来代替JavaScript,但还是失败了。有人知道我能做些什么来解决这个问题吗?

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

    2 回复  |  直到 8 年前
        1
  •  2
  •   Fraser Harris eschwartz    15 年前

    我今天也发生了同样的事情!我认为发生的是fbapi.check_session()未正确设置fbapi.added。我不认为 Post-Add URL 不再包含“已安装”,但仍添加了“fb_sig_”。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
    
        2
  •  0
  •   Community CDub    8 年前

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

    app-engine-patch and pyFacebook not working