Autenticação com o Facebook (SDK do PHP) e Codeigniter

Tudo bem, por um período de dois dias, tentei integrar a autenticação do Facebook no meu site baseado no Codeigniter. Eu incluí o Facebook SDK do PHP como uma biblioteca e isso parece se conectar muito bem, no entanto, quando eu uso o método getUser no SDK é retornado 0, o que indica que não estou logado (exceto que estou logado no facebook). Abaixo, incluí o SDK do PHP em formato de biblioteca, o modelo que chama os methods no SDK, o controlador que captura dados do modelo e a visualização que exibe as informações para o usuário. Espero que todos possam me oferecer algum insight para este problema agravante. Obrigado por toda a sua ajuda com antecedência! (e apenas no caso de iall estar pensando que estou usando algum código de um tutorial que encontrei em http://www.dannyherran.com/2011/02/facebook-php-sdk-and-codeigniter-for-basic-user-authentication/ ):

FB PHP SDK library (armazenada em aplicativos / bibliotecas):

constructSessionVariableName($key); $_SESSION[$session_var_name] = $value; } protected function getPersistentData($key, $default = false) { if (!in_array($key, self::$kSupportedKeys)) { self::errorLog('Unsupported key passed to getPersistentData.'); return $default; } $session_var_name = $this->constructSessionVariableName($key); return isset($_SESSION[$session_var_name]) ? $_SESSION[$session_var_name] : $default; } protected function clearPersistentData($key) { if (!in_array($key, self::$kSupportedKeys)) { self::errorLog('Unsupported key passed to clearPersistentData.'); return; } $session_var_name = $this->constructSessionVariableName($key); unset($_SESSION[$session_var_name]); } protected function clearAllPersistentData() { foreach (self::$kSupportedKeys as $key) { $this->clearPersistentData($key); } } protected function constructSessionVariableName($key) { return implode('_', array('fb', $this->getAppId(), $key)); } } ?> 

O Modelo:

  'MYAPPID', 'secret' => 'MYSECRET', 'fileUpload' => true, // Indicates if the CURL based @ syntax for file uploads is enabled. ); echo $this->load->library('Facebook', $config); // Get User ID $user = $this->facebook->getUser(); // We may or may not have this data based on whether the user is logged in. // // If we have a $user id here, it means we know the user is logged into // Facebook, but we don't know if the access token is valid. An access // token is invalid if the user logged out of Facebook. $profile = null; if($user) { try { // Proceed knowing you have a logged in user who's authenticated. $profile = $this->facebook->api('/me?fields=id,name,link,email'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } $fb_data = array( 'me' => $profile, 'uid' => $user, 'loginUrl' => $this->facebook->getLoginUrl( array( 'scope' => 'email,user_birthday,publish_stream', // app permissions 'redirect_uri' => '/profile' // URL where you want to redirect your users after a successful login ) ), 'logoutUrl' => $this->facebook->getLogoutUrl(), ); $this->session->set_userdata('fb_data', $fb_data); } } ?> 

O controlador:

 load->model('facebook_model'); } public function index(){ print_r($this->facebook); $fb_data = $this->session->userdata('fb_data'); // This array contains all the user FB information if((!$fb_data['uid']) or (!$fb_data['me'])) { // If this is a protected section that needs user authentication // you can redirect the user somewhere else // or take any other action you need //redirect(base_url()); echo "redirect"; } else { $data = array( 'fb_data' => $fb_data, ); $this->load->view('sand_view', $data); } } } ?> 

E, finalmente, a visão:

  
Please login with your FB account: <a href="https://stackoverflow.com/questions/9810691/authentication-with-facebook-php-sdk-and-codeigniter/">login <img src="https://graph.facebook.com//picture" alt="" class="pic" />

Hi ,
<a href="https://stackoverflow.com/questions/9810691/authentication-with-facebook-php-sdk-and-codeigniter/">You can access the top secret page or <a href="https://stackoverflow.com/questions/9810691/authentication-with-facebook-php-sdk-and-codeigniter/">logout

Eu tive o mesmo problema e meu hack foi que eu adicionei a matriz de configuração ao construtor da class do Facebook em vez de passar como um parâmetro para o construtor. Por algum motivo, a matriz de configuração não estava sendo passada ou lida.

então meu hack parece o seguinte:

  public function __construct() { if (!session_id()) { session_start(); } $config = array( 'appId' => FACEBOOK_APP_ID, 'secret' => FACEBOOK_SECRET ); parent::__construct($config); } 

Espero que isto ajude.

Eu tenho trabalhado com o SDK do Facebook no CodeIgniter há algum tempo, e decidi liberar meu código como uma extensão de código aberto. Há uma coisa: este código usa o SDK como uma biblioteca, e construiu um modelo em cima dele, tendo várias outras funções incríveis prontas para serem usadas.

No caso de você querer usá-lo, ou contribuir de qualquer forma (problemas, compromissos, etc.), sinta-se livre para participar:

https://github.com/AlphabaseIT/CIconnect

Acabei criando uma integração minha, você pode baixá-la aqui do GitHub: https://github.com/cworsley4/Codeigniter-with-Facebook