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,这是一个问题。
答案 0 :(得分:5)
尽管有所有的支持,但我能够找到解决这个非常严重的BUG的解决方案,这个BUG在带有CodeIgniter的Facebook PHP-SDK中找到。
以下是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没有正确的标题。
所以这会从$ _SERVER [' REQUEST_URI']构建$ _REQUEST,然后正确地通过Facebook类并成功返回正确的数据。
答案 1 :(得分:0)
使用此说明可能有帮助
$signed_request = isset($_REQUEST['signed_request']) ? $_REQUEST['signed_request'] : $this->modelfacebook->signRequest();
答案 2 :(得分:0)
根据this post中的一个答案,出于安全原因,CodeIgniter 清除<_ em> $ _REQUEST变量。我认为它与Codeigniter手册here中描述的自动输入过滤有关,但它并没有特别提及。我不确定是否设置
$config['global_xss_filtering'] = TRUE;
config.php中的是否会影响它(我将它设置为TRUE),但至少现在你/我们知道为什么$ _REQUEST变量不可用。
有趣的是,我在我的CIApplication / libraries /文件夹中有FB SDK库,它似乎可以很好地访问$ _REQUEST变量,而不是在我的视图或控制器中。
当我遇到这篇文章的时候,正在寻找同一个问题的答案 - 你的问题也是一个非常有效,好的问题!
干杯 马特