composer - github facebook sdk php
Facebook PHP-SDK con CodeIgniter que no devuelve $_REQUEST (3)
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);
}
}
Después de hacer clic en el enlace de inicio de sesión, me llevan a la página de permisos de Facebook, acepto, y vuelvo a la misma página sin datos.
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"
}
Mi volcado $ _REQUEST realmente no muestra firmado_request, que es un problema.
A pesar de todos los votos a favor, pude encontrar la solución a este ERROR MUY serio encontrado en Facebook PHP-SDK con CodeIgniter.
Así que aquí está la solución encontrada en los foros de 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);
}
Por alguna razón, el nuevo PHP SDK no pasa $ _REQUEST a través de CodeIgniter. También hay problemas con la memoria caché, y IE no tiene el encabezado adecuado.
Así que esto genera $ _REQUEST de $ _SERVER [''REQUEST_URI''], que luego pasa correctamente a través de la clase de Facebook y devuelve datos correctos.
De acuerdo con una de las respuestas en esta publicación , CodeIgniter purga la variable $ _REQUEST por razones de seguridad. Supongo que está relacionado con el filtrado de entrada automático descrito en el Manual Codeigniter aquí , pero no se menciona específicamente allí tampoco. No estoy seguro si el ajuste
$config[''global_xss_filtering''] = TRUE;
en config.php lo afecta o no (lo tengo configurado en TRUE en el mío), pero al menos ahora usted / nosotros sabemos por qué la variable $ _REQUEST no está disponible.
Curiosamente, tengo la biblioteca FB SDK en mi carpeta CIApplication / libraries / y parece tener acceso a la variable $ _REQUEST bien, solo que no en mis vistas o controladores.
Estaba buscando la respuesta a la misma pregunta cuando me encontré con esta publicación, ¡y la tuya también es una buena pregunta válida!
Saludos Matt
Use esta instrucción esto podría ayudar
$signed_request = isset($_REQUEST[''signed_request'']) ? $_REQUEST[''signed_request''] : $this->modelfacebook->signRequest();