php - 带有 CodeIgniter 的 Facebook PHP-SDK 不返回 $_REQUEST ['signed_request']

标签 php facebook codeigniter facebook-php-sdk

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,这是个问题。

最佳答案

尽管有很多反对票,但我还是找到了使用 CodeIgniter 解决这个在 Facebook PHP-SDK 中发现的非常严重的 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 不会通过 CodeIgniter 传递 $_REQUEST。缓存也存在问题,IE 没有正确的 header 。

所以这从 $_SERVER['REQUEST_URI'] 构建 $_REQUEST,然后正确地通过 Facebook 类并成功返回正确的数据。

关于php - 带有 CodeIgniter 的 Facebook PHP-SDK 不返回 $_REQUEST ['signed_request'],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424316/

相关文章:

html - bootstrap 下拉列表的大小错误。没有反应如何解决?

php - 针对一些未知数据的数据库表设计

javascript - 按钮单击事件后显示文本框

php - 获取另一个页面的id

ruby-on-rails - 收到 Uid 和 authtoken 时创建 facebook session

codeigniter - CodeIgniter 中 SQL where 语句的动态数量?

javascript - 使用数据表 javascript 服务器端在 php 中发布数据

php - 创建一个 PHP 类 -> 在另一个类中创建它的对象

php - Facebook Graph API 请求需要很长时间? (文件获取内容)

facebook - 使用 Facebook Graph API 全面了解搜索结果