Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/03/2013, 09:18
diegoibanez
 
Fecha de Ingreso: agosto-2010
Mensajes: 44
Antigüedad: 14 años, 3 meses
Puntos: 2
De acuerdo Aporte: Facebook connect en CodeIgniter

Hola amigos, la verdad es que estuve bastante complicado buscando por internet un tutorial de como mis usuarios pudiesen hacer el login con facebook, la verdad es que después de vagar muchas horas encontré algo bastante simple y explicativo que se puede encontrar aquí: http://www.youtube.com/watch?v=MxSIKGWxztA

Sin embargo y para evitar el video les entrego la librería que se crea en ese tutorial más algunas modificaciones, a mi me ha funcionado a la perfección. Espero a algunos les sirva :)

Lo que hay que tener presente es que los archivos de la api (base_facebook.php, facebook.php y fa_ca_chain_bundle.crt) se ubican en /application/libraries/facebook/

Luego nuestros archivos:

/application/config/facebook.php
Código PHP:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    
$config['appId'] = 'TuAppID';
    
$config['secret'] = 'TuAppSecretKey';
/application/libraries/fbconnect.php
Código PHP:
<?php
    
    
include(APPPATH 'libraries/facebook/facebook.php');

    class 
Fbconnect extends Facebook {
        
      public 
$user null;
      public 
$userId null;
        
        public function 
Fbconnect() {
            
$CI = &get_instance();
            
            
$CI->config->load('facebook'TRUE);
            
$config $CI->config->item('facebook');

            
parent::__construct($config);
            
parse_str(substr(strrchr($_SERVER['REQUEST_URI'], '?'), 1), $_REQUEST);
            
            
// Se comprueba si está logeado
            // Si se puede tomar la información del usuario
            
$this->userId $this->getUser();
            
            
// Sí tiene una sesión abierta
            
if($this->isLogedIn()) {
                try {
                    
// Se obtiene la info del usuario
                    
$this->user $this->api('/me');
                }
                catch(
FacebookApiException $e) {
                    
error_log($e);
                }
            }
            
        }
        
        
// Devuelve URL foto de perfil
        
public function profilePic($uid=FALSE) {
            if(!
$uid) {
                
$uid $this->userId;
            }
            
            return 
'http://graph.facebook.com/' $uid '/picture';
        }
        
        
// Realizar peticiones a través de FQL: Tabla, Scopes, Array u Objeto, Where
        // $this->fbconnect->fqlQuery('user', 'current_location');
        
public function fqlQuery($table$scopes$as_object=TRUE$where='uid=me()') {
            
$array $this->api(array('method'=>'fql.query','query'=>"SELECT " $scopes " FROM " $table " WHERE " $where));
            return (
$as_object json_decode (json_encode ($array[0]), FALSE) : $array[0]);
        }
        
        
// Comprobar si está logeado
        
public function isLogedIn() {
            return (
$this->userId);
        }
        
        
// Datos del usuario para manejo en controlador
        // $this->fbconnect->userData()->email;
        
public function userData($obj=TRUE) {
            if(
$this->user) {
                return (
$obj json_decode (json_encode ($this->user), FALSE) : $this->user);
            }
            return array();
        }
        
        
// Acción de login. Directo en el controlador
        // $this->fbconnect->doLogin('http://ejemplo.com/login/facebook', 'email');
        
public function doLogin($redirect$scope='') {
            
redirect($this->getLoginUrl(array('redirect_uri' => $redirect'scope' => $scope)));
        }
    
    }
Y ahora un pequeño ejemplo, obviamente que primero tenemos que crear nuestra aplicación en facebook para obtener la API Key y la clave secreta, luego de eso:

Código PHP:
class Prueba extends CI_Controller {

    public function 
index() {
        
// Cargamos la librería
        
$this->load->library('fbconnect');

        
// Hizo el login con facebook?
        
if($this->fbconnect->isLogedIn()) {
            
// Mostramos primer nombre
            
echo 'Hola ' $this->fbconnect->userData()->first_name '<br />';
            
            
// Mostramos foto de perfil
            
echo '<img src="' $this->fbconnect->profilePic() . '" /><br />';
            
            
// Mostramos el resto de los datos que nos entrega facebook
            
echo '<pre>';
            
print_r($this->fbconnect->userData());
            echo 
'</pre>';
        }
        
// Si no ha hecho el login le mostramos el link
        
else {
            echo 
anchor('/prueba/fblogin''Login con facebook');
        }
    }
    
    public function 
fblogin() {
        
// Cargamos la librería
        
$this->load->library('fbconnect');
        
        
// Se hace el login, primer parámetro la dirección donde los devolverá y el segundo los "scopes" (Info adicional que queremos pedirle a facebook)
        
$this->fbconnect->doLogin(site_url('/prueba'), 'email,user_birthday,user_location');
    } 
Eso es todo, espero a alguien más le sirva ya que a mi me complicó bastante en un principio.

Saludos!

Última edición por diegoibanez; 04/03/2013 a las 09:28