带有CodeIgniter的Facebook PHP-SDK未返回$#u请求[';已签名的';]

带有CodeIgniter的Facebook PHP-SDK未返回$#u请求[';已签名的';],php,facebook,codeigniter,facebook-php-sdk,Php,Facebook,Codeigniter,Facebook Php Sdk,点击登录链接后,我被带到Facebook权限页面,我接受,然后返回到同一页面,没有任何数据 class Example extends CI_Controller { function __construct() { parent::__construct(); } function index() { $this->load->library('facebooklib'); $user

点击登录链接后,我被带到Facebook权限页面,我接受,然后返回到同一页面,没有任何数据

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);
    }
}

我的$\u请求转储实际上没有显示签名的\u请求,这是一个问题。

使用此指令这可能会有所帮助

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"
}

尽管有这么多的反对票,我还是找到了使用CodeIgniter在Facebook PHP-SDK中发现的这个非常严重的错误的解决方案

以下是CI论坛中的解决方案:

出于某种原因,新的PHPSDK没有通过CodeIgniter传递$\请求。缓存也有问题,IE没有正确的头


因此,这将从$\u服务器['REQUEST\u URI']生成$\u请求,然后该服务器正确地通过Facebook类并成功地返回正确的数据。

根据中的一个答案,CodeIgniter出于安全原因清除$\u请求变量。我假设它与Codeigniter手册中描述的自动输入过滤有关,但也没有特别提到。我不确定这是否是个好主意

    // 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);
    }
在config.php中,它是否会影响它(我的设置为TRUE),但至少现在您/我们知道了为什么$u请求变量不可用

有趣的是,我在CIApplication/libraries/folder中有FB SDK库,它似乎可以很好地访问$\u请求变量,只是不在我的视图或控制器中

当我看到这篇文章时,我正在寻找同一个问题的答案,而你的问题也是一个非常有效、很好的问题

干杯
马特

我不知道为什么会被否决。至少给它一个很好的理由。我没有看到一个名为signRequest()的函数;它是PHP-SDK的一部分吗?检查你的facebook库,它可能在那里,我把它作为一个模型使用,所以我有这个说明可能与这个观点有关可能与这个观点有关是的,这就是答案。但不是更改配置,而是决定手动填写$\u请求。有点傻(几乎像黑客),但它是有效的。
    // 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);
    }
 $config['global_xss_filtering'] = TRUE;