Foros del Web » Programando para Internet » PHP »

Problema con el login a través de facebook y php

Estas en el tema de Problema con el login a través de facebook y php en el foro de PHP en Foros del Web. Buenas tardes. Estoy intentando crear un sistema por el cual permita a cualquier persona que esté registrada en facebook loguearse sin necesidad de pasar por ...
  #1 (permalink)  
Antiguo 12/01/2014, 08:52
 
Fecha de Ingreso: julio-2011
Mensajes: 75
Antigüedad: 8 años, 6 meses
Puntos: 0
Problema con el login a través de facebook y php

Buenas tardes.

Estoy intentando crear un sistema por el cual permita a cualquier persona que esté registrada en facebook loguearse sin necesidad de pasar por el proceso de registro de mi aplicación.

Para ello, he planteado lo siguiente:

Un botón con html:

Código HTML:
Ver original
  1. <a id="fb_log" href="#">
  2.      <img alt="fb_login" src="./framework/images/fb_login.png"/>
  3. </a>

Cuando se realiza un click en ese botón, un evento en javascript es activado a través de JQUERY

Código Javascript:
Ver original
  1. $("#fb_log").click(function(){
  2.      $.ajax({
  3.           url: '/es/framework/methods/ajax/login_facebook.php',
  4.           type: "post",
  5.           cache: false,
  6.           success: function (retorno) {
  7.            if (retorno==1)
  8.                 window.location.href= "http://www.mipagina.com/es/page/home.inc.php";
  9.       }
  10.      });
  11. });

Este evento JQUERY establece una conexión asíncrona llamando al fichero login_facebook.php que se encargará de llamar a las funciones para validar a un usuario en facebook a través de php.

Código PHP:
Ver original
  1. require_once ($_SERVER['DOCUMENT_ROOT'].'/es/framework/classes/Builder.php');
  2. $UIModules = Builder::getUIModules();
  3. $UIModules->fbLogin();

Accedemos al fichero donde se encuentran todas las funciones, UIModules. Aquí está el acceso a facebook. Si el usuario ya está logueado en facebook y el cliente que conecta ya está autentificado en ese ordenador, automáticamente debería entrar, si no, debería enviarlo a la página web de facebook para que loguease.

Código PHP:
function fbLogin(){
     require_once (
$_SERVER['DOCUMENT_ROOT'].'/es/framework/classes/'.'facebook.php');
     
$facebook = new Facebook(array(
          
'appId' => '078128215496471',
      
'secret' => 'ae03ca1a51f423ab251932aa2ffaa6f4',
     ));
     
$user $facebook->getUser();
         if (
$user){
          try{
               
$user_profile $facebook->api('/me');
          }catch(
FacebookApiException $e){
               
error_log($e);
               
$user null;
          }
     }else{
        
$login_url $facebook->getLoginUrl(array( 'scope' => 'email'));
        
header("Location: " $login_url);
        }
    }

Por alguna extraña razón, esto no funciona. Alguien me puede ayudar / decir que estoy haciendo mal? Me sería de gran ayuda. Soy estudiante de programación y pese a que he leido bastante en la api de facebook y multitud de foros, y en todos ellos utilizan el modo javascript, tengo cierto interés en saber como sería en php.

Gracias de antemano
  #2 (permalink)  
Antiguo 12/01/2014, 11:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Problema con el login a través de facebook y php

Cita:
Por alguna extraña razón, esto no funciona
¿Y qué estás haciendo para depurar lo que sucede?

No creo que vayamos a ejecutar mentalmente tu código para indicarte el problema exacto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/01/2014, 12:04
 
Fecha de Ingreso: julio-2011
Mensajes: 75
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Problema con el login a través de facebook y php

Cita:
¿Y qué estás haciendo para depurar lo que sucede?
Efectivamente, estoy usando firebug para depurar el código, solo que he omitido esa línea pues pensaba que no era necesaria, voy a intentar ser mas específico.

Código PHP:
function fbLogin(){
     require_once (
$_SERVER['DOCUMENT_ROOT'].'/es/framework/classes/'.'facebook.php');
     require_once(
$_SERVER['DOCUMENT_ROOT'].'/es/framework/other_components/FirePHPCore/'.'FirePHP.class.php');
     
ob_start();
     
$firephp FirePHP::getInstance(true);
     
$facebook = new Facebook(array(
          
'appId' => '378488665495077',
          
'secret' => 'ae069a1151f723fa251966b2f4632614',
     ));
     
$user $facebook->getUser();
     
$firephp->log($user);
     if (
$user){
          try{           
        
$user_profile $facebook->api('/me');
      }catch(
FacebookApiException $e){
           
error_log($e);
           
$user null;
      }
    }else{
    
$login_url $facebook->getLoginUrl(array( 'scope' => 'email'));
    
$login_url = (str_replace("framework%2Fmethods%2Fajax%2Flogin_facebook.php""page/home.inc.php"$login_url));
    
$firephp->log($login_url);
        
//print_r ($login_url);
    //header("Location: " . $login_url);
    
}

Lo que estoy haciendo en primer lugar es incluir todas las funciones que hay en el fichero facebook.php descargado desde la página.
facebook.php tiene en su interior una llamada a base_facebook.php con mas funciones.

La idea es que utlizando la variable facebook que contiene el apId y el código secreto, intento obtener el usuario a partir de una sesión, si $user está vacio, entonces se me va por el else de abajo del todo y crea una nueva sesión.

Al principio encontré un error ya que parte de la url que retornaba getLoginUrl(); me devolvía la localización del fichero login_facebook.php pero lo corregí substituyendo esa parte con un str_replace(). Comprobaba lo que me devolvía $login_url y veía que estaba todo correcto, así que quería crear una redirección con header a esa url.

El problema es que cuando descomento la línea que contiene la etiqueta header para redireccionarme a la página de facebook para que ingrese el usuario y contraseña si no está habilitado el acceso automático obtengo este error:

CHROME: XMLHttpRequest cannot load https://www.facebook.com/dialog/oaut....3&scope=email. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mipagina.com' is therefore not allowed access.

FIREFOX: POST http://mipagina.com/es/framework/met...n_facebook.php 302 Found 158ms (EN ROJO)

Encabezados de respuesta
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection keep-alive
Content-Length 0
Content-Type text/html
Date Sun, 12 Jan 2014 18:05:21 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Location https://www.facebook.com/dialog/oaut....3&scope=email
Pragma no-cache
X-Powered-By PHP/5.3.24
X-Wf-1-1-1-1 112|[{"Type":"LOG","File":"\/home\/u550260325\/public_html\/es\/framework\/classes\/UIModules.php","Line":"56"},"0"]|
X-Wf-1-Index 1
X-Wf-1-Plugin-1 http://meta.firephp.org/Wildfire/Plu...irePHPCore/0.3
X-Wf-1-Structure-1 http://meta.firephp.org/Wildfire/Str...bugConsole/0.1
X-Wf-Protocol-1 http://meta.wildfirehq.org/Protocol/JsonStream/0.2
Encabezados de solicitud
Accept */*
Accept-Encoding gzip, deflate
Accept-Language es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Cookie PHPSESSID=0rcurd36pvpvp8n3rrj3kaogb6
DNT 1
Host mipagina.com
Referer http://mipagina.com/es/index.php
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
X-Requested-With XMLHttpRequest


Por supuesto, ni redirección ni nada
  #4 (permalink)  
Antiguo 12/01/2014, 12:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Problema con el login a través de facebook y php

Pues el mensaje es muy claro:
Cita:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://mipagina.com' is therefore not allowed access.
¿Estás consultando la documentación oficial de Facebook al respecto?

¿Estás configurando correctamente tu aplicación para desarrollo local?

Me parece que te hacen falta varias cosas que en la documentación se especifica.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 12/01/2014, 12:52
 
Fecha de Ingreso: julio-2011
Mensajes: 75
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Problema con el login a través de facebook y php

Cita:
Iniciado por pateketrueke Ver Mensaje

¿Estás consultando la documentación oficial de Facebook al respecto?

¿Estás configurando correctamente tu aplicación para desarrollo local?
En la documentación se especifica que tengo que completar el campo app domains que está en configuración del panel de administración de la cuenta de facebook para la aplicación, esto es



El error específico que recibo tras el logueo muestra visualmente en mi pantalla lo siguiente:



decir que este código viene diréctamente cogido de facebook modificando en mis ficheros php lo relativo a rutas, y variables appId y secret
  #6 (permalink)  
Antiguo 12/01/2014, 13:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 9 meses
Puntos: 2534
Respuesta: Problema con el login a través de facebook y php

Por lo que se aprecia del error, se trata de un loop infinito de redirección.

Es decir, tu script carga la librería de Facebook y procede a iniciar sesión, ahí se produce la primer redirección hacia Facebook.

Después, se supone que Facebook hace una redirección hacia donde tu le indiques, justo ahí debes comprobar otros detalles e iniciar sesión en tu sistema.

A partir de ese punto no necesitas redirigir de nuevo a Facebook.

El loop infinito parece indicarte que no estás cerrando el flujo correctamente, por lo que se pasa sitio=>facebook=>sitio=>facebook=>sitio=>facebook= >sitio, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 12/01/2014, 13:53
 
Fecha de Ingreso: julio-2011
Mensajes: 75
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Problema con el login a través de facebook y php

Cita:
Iniciado por pateketrueke Ver Mensaje
El loop infinito parece indicarte que no estás cerrando el flujo correctamente, por lo que se pasa sitio=>facebook=>sitio=>facebook=>sitio=>facebook= >sitio, etc.
Mas o menos ya sé por donde puede estar el problema y estoy trabajando sobre ello!.

No cierro el post hasta que mire mas a fondo como puedo solucionar el problema, por si acaso necesito dar nuevos detalles o me surjen nuevos errores.

A partir de ahora incluso para que sea mas fácil todo dejaré en un repositorio github todo el código para que se pueda aportar una solución mas específica al problema!

Muchas gracias por todo.

Etiquetas: facebook, html, login, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:54.