Facebook的PHP-SDK使用CodeIgniter没有返回$ _REQUEST [ '

2019-06-24 03:44发布

class Example extends CI_Controller {

    function __construct()
    {
        parent::__construct();
    }

    function index()
    {

        $this->load->library('facebooklib');

        $user = $this->facebooklib->getUser();

        if ($user) {
            try {
                $data['user_profile'] = $this->facebooklib->api('/me');
            } catch (FacebookApiException $e) {
                $user = null;
            }
        }

        var_dump($_REQUEST);

        if ($user) {
            $data['logout_url'] = $this->facebooklib->getLogoutUrl();
        } else {
            $data['login_url'] = $this->facebooklib->getLoginUrl();
        }

        $this->load->view('view',$data);
    }
}

点击登录链接后,我被带到Facebook的权限页面,我接受了,而我回到了同一页面没有数据。

array(3) {
  ["/example"]=>
  string(0) ""
  ["PHPSESSID"]=>
  string(32) "33a446883d4fb1877fb6dcff6d70799a"
  ["ci_session"]=>
  string(311) "a:4:{s:10:"session_id";s:32:"d8bb3926550e3ec1b9d075b456708e9b";s:10:"ip_address";s:9:"127.0.0.1";s:10:"user_agent";s:120:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19";s:13:"last_activity";i:1336011855;}c874fb95984396f04ab6cc17217102d7"
}

我的$ _REQUEST转储并没有真正表现出signed_request,这是一个问题。

Answer 1:

尽管所有的downvotes,我能够找到解决了Facebook PHP-SDK发现的CodeIgniter这个非常严重的BUG。

因此,这里是在CI论坛上找到了解决办法: http://codeigniter.com/forums/viewthread/202370/#986781

    // Stop cache
    $this->ci->output->set_header("Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
    $this->ci->output->set_header("Pragma: no-cache");

    // IE Fix
    if(strpos($this->ci->agent->agent_string(), 'MSIE') !== FALSE) {
        $this->ci->output->set_header('p3p: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"');
    }

    // Repopulate _REQUEST ... Facebook needs it.
    $request_uri = $_SERVER['REQUEST_URI'];
    $request_uri = explode('?',$request_uri);
    if(count($request_uri) > 1) {
        parse_str($request_uri[1], $_REQUEST);
    }

出于某种原因,新的PHP SDK不通过笨通过$ _REQUEST。 还有问题与缓存和IE没有正确的头文件。

因此,这从$ _ SERVER [“REQUEST_URI”],然后适当地通过Facebook类建立$ _REQUEST并成功返回正确的数据。



Answer 2:

使用该指令,这可能帮助

$signed_request = isset($_REQUEST['signed_request']) ? $_REQUEST['signed_request'] : $this->modelfacebook->signRequest();


Answer 3:

据其中一个答案这个帖子 ,笨清除出于安全原因,$ _REQUEST变量。 我以为它涉及到笨手册的过滤描述的自动输入在这里 ,但它没有具体有两种,虽然提及。 我不确定是否设置

 $config['global_xss_filtering'] = TRUE;

在config.php影响与否(我把它设置为TRUE矿),但至少现在你/我们知道为什么$ _REQUEST变量不可用。

有趣的是,我在我的CIApplication /库/文件夹中的FB SDK库,它似乎访问$ _REQUEST变量罚款,只是没有在我的意见或控制器。

一直在寻找的答案同样的问题,当我遇到这个职位来 - 而你的是一个完全有效的,很好的问题呢!

干杯马特



文章来源: Facebook PHP-SDK with CodeIgniter not returning $_REQUEST['signed_request']