Usando Facebook PHP-SDK 3.x para registrar / iniciar sesión con Codeigniter 2.1.0

Repasando la API de Facebook y estoy un poco confundido sobre el enfoque correcto. Quiero que los usuarios omitan el registro o que se registren automáticamente si inician sesión con Facebook. Entonces, si inician sesión en Facebook, recopilo su identificación, correo electrónico y creo un registro en mi tabla de usuarios.

Si ya existe una identificación en la tabla de usuarios, omiten el registro automático y van directamente a la página de miembros. Este es mi código hasta ahora (tomado del ejemplo de PHP SDK de Facebook). Cuando ejecuto el script de suscripción la página aparece como en blanco, no me redireccionan.

EDITAR: parece estar fallando justo después de requerir, si uso el siguiente código ‘prueba’ nunca se imprime.

EDITAR: estoy usando Codeigniter y este script es parte de un controlador, ¿eso causaría un problema con el requerido?

require 'http://localhost/facebook-php-sdk-6c82b3f/src/facebook.php'; echo "test"; 

 public function signup() { require 'http://localhost/facebook-php-sdk-6c82b3f/src/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'xxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx', )); // Get User ID $user = $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. if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Login or logout url will be needed depending on current user state. if ($user) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl(array('scope' => 'email')); redirect($loginUrl); } print_r($user_profile); $this->load->model("user_model"); $privileges = 1; $loginLocation = ip2long($_SERVER['REMOTE_ADDR']); $active = 1; $this->user_model->add_user($user_profile->id, $user_profile->name, $user_profile->email, $loginLocation, $privileges, $active); } 

Sugiero que lea la documentación del marco. Agregar una biblioteca a CodeIgniter no es una tarea difícil. Y la biblioteca de Facebook no es una excepción.

Aquí hay una integración rápida que acabo de presentar:

1.crear un archivo de configuración: application/config/facebook.php

 < ?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); $config['appId'] = 'app_id'; $config['secret'] = 'app_secret'; 

2. Coloque los archivos sdk en la carpeta de bibliotecas application/libraries/ y cambie el nombre del archivo facebook.php a Facebook.php y reemplace la etiqueta php con esto:

 < ?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

3.en su controlador cargue el archivo de configuración y luego cargue la biblioteca de Facebook:

 < ?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Welcome extends CI_Controller { public function __construct() { parent::__construct(); // Your own constructor code $CI = & get_instance(); $CI->config->load("facebook",TRUE); $config = $CI->config->item('facebook'); $this->load->library('facebook', $config); } public function index() { $user = $this->facebook->getUser(); if($user) { try { $user_info = $this->facebook->api('/me'); echo '
'.htmlspecialchars(print_r($user_info, true)).'

'; } catch(FacebookApiException $e) { echo '

'.htmlspecialchars(print_r($e, true)).'

'; $user = null; } } else { echo "facebook->getLoginUrl()}\">Login using Facebook"; } } }

Ahora en el método constructor, acaba de inicializar la biblioteca de Facebook (sdk) y se puede acceder utilizando: $this->facebook .

Notas:

  • Siempre puedes usar una biblioteca existente, solo googlearla
  • Una práctica común es extender la clase Core Controller y agregar allí la inicialización de la biblioteca de Facebook.
  • O cree otra biblioteca, extienda la biblioteca de Facebook, cargue el archivo de configuración allí y luego autocargue esta nueva biblioteca.

Después de obtener el $user , verifique los parámetros de la sesión con print_r($_SESSION) . Después de eso, verifique algunas variables por if(isset($_SESSION['some session var'])) . Si esta condición es verdadera, navegue a su página principal con el header("location:main.php"); exit; header("location:main.php"); exit;

Puedes intentar usar mi extensión http://github.com/deth4uall/Facebook-Ignited que está configurado para trabajar con Facebook. Simplemente actualice el archivo de configuración y le permitirá hacer lo que necesita hacer, así como algunos métodos adicionales que yo mismo agregué.

No sé por qué, pero siempre se ejecuta esta línea:

echo "facebook->getLoginUrl()}\">Login using Facebook";

Este es el mensaje de error:

no se pudo conectar al host

Pero esto funcionó.