2012-02-26 5 views
5

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, recolectaré su identificación, correo electrónico y crearé un registro en mi tabla de usuarios.Usando Facebook PHP-SDK 3.x para registrar/iniciar sesión con Codeigniter 2.1.0

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.

EDIT: Estoy usando Codeigniter y este script es parte de un controlador, ¿eso causaría un problema con el requerimiento?

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

    } 
+0

¿Ha probado el requerimiento con una ruta del sistema de archivos en lugar de una ruta de URL? – BenOfTheNorth

Respuesta

12

Le sugiero que lea el marco documentation. Agregar una biblioteca a CodeIgniter es no una tarea difícil. Y la biblioteca de Facebook no es una excepción.

Aquí hay una rápida integración Acabo de llegar con:

1.Create 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.place los archivos SDK en las bibliotecas carpeta application/libraries/ y cambiar el nombre facebook.php presentar a Facebook.php y vuelva a colocar la etiqueta de php con esto:

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

3.in su carga controlador de la config Archivo y luego cargar 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 '<pre>'.htmlspecialchars(print_r($user_info, true)).'</pre>'; 
      } catch(FacebookApiException $e) { 
       echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
       $user = null; 
      } 
     } else { 
      echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>"; 
     } 
    } 
} 

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

Notas:

  • siempre se puede utilizar una biblioteca existente, simplemente google it
  • Una práctica común es extender la clase controlador de núcleo y añadir la biblioteca de inicialización Facebook allí.
  • O cree otra biblioteca, extienda la biblioteca de Facebook, cargue el archivo de configuración allí y luego autocargue esta nueva biblioteca.
+1

Gracias, eso hizo el truco. Tengo algo que leer. – PhoenixDown

+0

¡De nada! – ifaour

+0

+1 para un ejemplo simple en formato Codeigniter – Zabs

0

Después de conseguir el $user, comprobar los parámetros de 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, vaya a su página principal con header("location:main.php"); exit;

0

Puede intentar usar mi extensión http://github.com/deth4uall/Facebook-Ignited que está configurado para funcionar 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é.

0

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

echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>";

Este es el mensaje de error:

no pudo conectar al servidor

Pero esto funcionó.