سؤال

لدي مشروع 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 لذلك قد يكون مختلفا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top