con composer auth php facebook codeigniter facebook-php-sdk

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