0

ページを facebook タブに出力しようとすると、Fat Free Framework に何らかの制限がありますか?

私はすでにこの以下のコードで試していますが、残念ながらFacebookタブのiframeでは常に空白のページが空です。

<?php

$f3=require('app/lib/base.php');

require_once 'app/lib/fb/facebook.php';

$f3->route('GET /',
    function() {
        echo 'Hello';
    }
);
$f3->route('GET /landing',
    function() {
        $app_id = 'xxxx';
        $secret_key = 'yyyy';
        $page_id = 'zzzz';

        $config = array(
            'appId' => $app_id,
            'secret' => $secret_key
        );

        $fb = new Facebook($config);

        $fbdata = $fb->getSignedRequest();

        $fbInPage = false;
        if(!empty($fbdata) && is_array($fbdata)
            && !empty($fbdata['page']) && is_array($fbdata['page'])
            && !empty($fbdata['page']['id'])
        ) {
            $fbInPage = $fbdata['page']['id'];
        }

        // Check if user not in fb tab
        if(!$fbInPage) {
            // Redirect to facebook tab
            echo '<script>window.location.href="https://www.facebook.com/'.
                $page_id.
                '?sk=app_'.
                $app_id.
                '"</script>';
            exit;
        }

        // Get User ID
        $user = $fb->getUser();

        // Check if user not connected to facebook
        if ($user) {
            try {
                $user_data = $fb->api("/me");
            } catch (FacebookApiException $e) {
                $user_data = null;
            }
        } else {
            // Asking permission for email and user_likes
            $fb_login_url = $fb->getLoginUrl(array(
                'scope' => 'email, user_likes'
            ));

            echo '<script>top.location.href = "'.$fb_login_url.'"</script>';
            exit;
        }
    }
);

$f3->run();

最初にユーザーがアクセスしようとするGET /landingと、Facebook タブにリダイレクトされ、ページが表示されますGET /。しかし、どういうわけか、常に空のページが返され、Firefoxのfirebugですでに検査されており、応答タブに常に表示されるエラーはありませんReload the page to get source for: https://localhost/f3-fb/。すでに私のオフィスのフレームワークで試してみてください。完璧に動作します。

誰かがこの問題を抱えている場合は、アドバイスしてください。

4

1 に答える 1

0

問題は、XFRAMEデフォルトの F3 でXFRAME値をに設定することです。このドキュメントSAME-ORIGINに基づいて、開発者は値を でオーバーロードする必要があります。ALLOW-FROM uri

index.php の完全なコードは次のとおりです。

<?php

$f3=require('app/lib/base.php');

require_once 'app/lib/fb/facebook.php';

$f3->set('XFRAME', 'ALLOW-FROM https://localhost/f3-fb/');

$f3->route('POST /',
    function() {
        echo 'Hello';
    }
);

$f3->route('GET /landing',
    function() {
        $app_id = 'xxxx';
        $secret_key = 'yyyy';
        $page_id = 'zzzz';

        $config = array(
            'appId' => $app_id,
            'secret' => $secret_key
        );

        $fb = new Facebook($config);

        $fbdata = $fb->getSignedRequest();

        $fbInPage = false;
        if(!empty($fbdata) && is_array($fbdata)
            && !empty($fbdata['page']) && is_array($fbdata['page'])
            && !empty($fbdata['page']['id'])
        ) {
            $fbInPage = $fbdata['page']['id'];
        }

        // Check if user not in fb tab
        if(!$fbInPage) {
            // Redirect to facebook tab
            echo '<script>window.location.href="https://www.facebook.com/'.
                $page_id.
                '?sk=app_'.
                $app_id.
                '"</script>';
            exit;
        }

        // Get User ID
        $user = $fb->getUser();

        // Check if user not connected to facebook
        if ($user) {
            try {
                $user_data = $fb->api("/me");
            } catch (FacebookApiException $e) {
                $user_data = null;
            }
        } else {
            // Asking permission for email and user_likes
            $fb_login_url = $fb->getLoginUrl(array(
                'scope' => 'email, user_likes'
            ));

            echo '<script>top.location.href = "'.$fb_login_url.'"</script>';
            exit;
        }
    }
);

$f3->run();

$f3->set('XFRAME', 'ALLOW-FROM https://localhost/f3-fb/');Facebook iframe 内でこの URL を許可するように構成を追加します。

そして、常にPOSTFacebookのiframe内のルートに使用します(なぜF3でそれを使用する必要があるのか​​ はまだわかりませんが、エラーが発生してPOSTルートを要求します)

于 2014-04-01T04:17:32.370 に答える