إعادة توجيه حلقات مع Pyfacebook ومحرك تطبيق Google
-
23-09-2019 - |
سؤال
لدي مشروع Python Facebook مستضيف على محرك تطبيق Google واستخدم الكود التالي للتعامل مع تهيئة واجهة برمجة تطبيقات Facebook باستخدام Pyfacebook.
# 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 بعد إضافة يحتوي على "تثبيت" بعد الآن ، ولكن لا يزال لديه "fb_sig_added". أوقف التغيير التالي (رمز GitHub-esque) في PyfaceBook إعادة التوجيه اللانهائي بالنسبة لي:
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-Levine-Patch و Pyfacebook
ولكن كان ذلك مع الديكور الذي يأتي مع Pyfacebook لذلك قد يكون مختلفا.