1

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)

このデコレーターを任意のページ ハンドラー メソッドにドロップして、ユーザーがすべて正しく設定されていることを確認できるように設定しようとしています。問題は、リダイレクト ハンドラが呼び出されると、リダイレクトの無限ループが開始されることです。

JavaScript の代わりに HTTP 302 リダイレクトを使用しようとしましたが、それでも失敗し続けました。これを修正するために私ができることを誰かが知っていますか?

この同様の質問を見ましたが、回答がありません。

4

2 に答える 2

2

私はちょうど今日私にまったく同じことが起こっていました!私が考えているのは、 fbapi.check_session() が fbapi.added を正しく設定していないことです。追加後の URLには「インストール済み」が含まれていないと思いますが、「fb_sig_added」はまだ含まれています。pyfacebook の次の変更 (github 風のコード) により、無限リダイレクトが停止しました。

1244 | 1244 | request.method == 'POST' の場合:
1245 | 1245 | params = self.validate_signature(request.POST)
1246 | 1246 | そうしないと:
1247 | | | - request.GET に「インストール済み」の場合:
     | | 1247 | + request.GET または request.GET['fb_sig_added'] == '1' に「インストール済み」の場合:
1248 | 1248 | self.added = True
于 2010-03-18T04:35:56.177 に答える
0

問題はおなじみのようです。ここで私の質問の解決策を使用できますか:

app-engine-patch と pyFacebook が機能しない

しかし、それは pyfacebook に付属しているデコレータを使用していたので、異なる場合があります。

于 2010-03-06T22:26:03.320 に答える