Facebook Tab与无脂肪框架

时间:2014-03-25 02:57:57

标签: php facebook fat-free-framework

当我们尝试将页面输出到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/。已经尝试使用我的办公室框架并且完美运行。

如果有人遇到这个问题,请告知。

1 个答案:

答案 0 :(得分:0)

问题出在XFRAME,在默认F3上将XFRAME值设置为SAME-ORIGIN,根据此doc,开发人员必须使用{{1}重载该值}。

以下是index.php的完整代码:

ALLOW-FROM uri

添加配置<?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(); 以允许在facebook iframe中使用此网址。

并始终使用$f3->set('XFRAME', 'ALLOW-FROM https://localhost/f3-fb/');作为facebook iframe内的路线(仍然不知道为什么必须使用F3,但会出现错误并要求POST路线)< / p>