带有CodeIgniter的Facebook PHP-SDK未返回$#u请求[';已签名的';]
点击登录链接后,我被带到Facebook权限页面,我接受,然后返回到同一页面,没有任何数据带有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
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;