我在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,但是没有答案。
最佳答案
今天我只是发生了同样的事情!我认为正在发生的是fbapi.check_session()未正确设置fbapi.add。我认为Post-Add URL不再包含“已安装”,但仍然具有“ fb_sig_added”。 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 =真