Foros del Web » Programando para Internet » PHP »

[APORTE] Usar Facebook Connect

Estas en el tema de [APORTE] Usar Facebook Connect en el foro de PHP en Foros del Web. Hola... Te cuento que yo integré Facebook Connect, y después de lidiar 2 noches terminé entendiendo... y es realmente muy simple. Supongo que ya habrás ...
  #1 (permalink)  
Antiguo 07/04/2009, 03:17
 
Fecha de Ingreso: marzo-2007
Mensajes: 14
Antigüedad: 17 años, 1 mes
Puntos: 5
[APORTE] Usar Facebook Connect

Hola...

Te cuento que yo integré Facebook Connect, y después de lidiar 2 noches terminé entendiendo... y es realmente muy simple.

Supongo que ya habrás creado la aplicación en Facebook.com, obtenido el api_key, el secret_key, etc...

Bueno, primero tienes que mostrar el botoncito para poder iniciar sesión con la cuenta de Facebook, siempre y cuando el visitante no esté logueado.

¿Cómo saber si está logueado o no? No te preocupes... tan solo compruebalo como siempre lo haces... mediante sesiones, cookies o lo que sea que utilizes actualmente para manejar el registro e inicio de sesión de usuarios.

Bueno... una vez que sabes que el visitante no está logueado, además de mostrarle el login de siempre de tu web, le muestras el de Facebook... Ya sabes... el botoncito azul que dice "Connect with Facebook" (imagino que hasta aquí llegaste sin problemas)

Código HTML:
<fb:login-button length="long" onlogin="location.href='<? echo $_SERVER['REQUEST_URI'];?>'"></fb:login-button>
    <script type="text/javascript" src="H T T P : //static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"></script>
    <script type="text/javascript">
    FB.init("Ingresa aquí la Key que identifica a tu aplicación...","xd_receiver.htm");
    </script> 
Hasta acá está clara la cosa... checkeas si el visitante no está logueado (de la forma que tu quieras y como siempre lo haz hecho), si descubres que no está logueado, le presentas el formulario para iniciar sesión desde tu web y le presentas el botón para iniciar sesión con Facebook...

Una vez que ya aparece el botón de Facebook Connect, el usuario ya tiene la posibilidad de clickear sobre él e iniciar sesión con su e-mail y password de FB.

Esto es lo que sucede cuando el usuario presiona dicho botón:

1) El usuario clickea sobre "Connect with Facebook" y le aparece un popup en javascript/ajax pidiendo email y passoword.
2) El usuario ingresa los datos y clickea sobre el botón "Connect" del popup.
3) Cuando los datos son válidos, el popup en javascript/ajax desaparece y se crea una cookie con los datos de sesión del usuario en facebook sobre el domain de tu web.

NOTESE QUE NUNCA SALISTE TU PÁGINA WEB, NI LA REFRESASTE NI NADA, SIMPLEMENTE SALIÓ UN POPUP EN AJAX.

Así que ahora tendrás que pedirle el usuario que por favor presione F5 así tu puedes comenzar a leer la cookie (Mentira! )

Cuando el login con Facebook es correcto, se produce el evento onlogin y desde ahí puedes llamar a una función en javascript, refrescar la web, redirigirla, lo que tu quieras...

Bueno... ya tenemos la(s) cookie(s) con los datos de sesión de Facebook en nuestro domain... ¿Y AHORA COMO LAS LEEMOS?

Bueno... tendrás que descargar la API en PHP para desarrolladores de Facebook, la puedes encontrar aquí --> svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz

Dentro del archivo, encontrarás una carpeta llamada "footprints"... que es tan solo un ejemplo de Facebook... si quieres lo mirás, o si no, no lo miras... digamos, no son archivos necesarios para correr la API ni el FBConnect, solo son ejemplos de como utilizarlos.

Lo importante son los archivos incluidos dentro de la carpeta PHP... a esos files los descomprimes en algún lugar del webserver, yo los descomprimí dentro de una carpeta llamada "Facebook" ubicada en la raiz.

Una vez descomprimidos los archivos de la API, nos dirigimos hacia nuestro archivo en donde recibiremos los datos de la sesión (login.php, index.php, lo que sea...)

En dicho archivo incluiremos la API de Facebook... y luego comenzaremos a trabajar con ella (facebook.php)

Código PHP:
require_once 'facebook/facebook.php'//Ruta de la api...

$Aplicacion 'Ingresa aquí la Key que identifica a tu aplicación...'//No olvides ingresar la key de tu aplicación
$ClaveSecreta 'Ingresa aquí tu SecretKey...'//No olvides ingresar la clave proporcionada por FB

$Facebook = new Facebook($Aplicacion$ClaveSecreta); 
Ya estamos listos para empezar a obtener un poco de info sobre esa sesión, como por ejemplo el Nombre, el Apellido y el ID único de ese user en Facebook.

Código PHP:

If ($Facebook->get_loggedin_user())
{
        
$FID $Facebook->require_login(); //obtenemos el id del user en FB
                         
        
$user_details $Facebook->api_client->users_getStandardInfo($FID, array('last_name','first_name')); //intentamos obtener un poco de información del perfil
        
$Nombre $user_details[0]['first_name']; //Almacenamos los datos del array
        
$Apellido $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido

Bueno... ahí tienes

Ahora puedes terminar de hacer una integración total almacenando esos datos en tu base de datos, etc..

Imagino que en tu sitio cada usuario es identificado con un ID, y ese ID lo obtienes cuando el usuario inicia sesión... ej:

Tienes una tabla de usuarios parecida a esta:

id | usuario | password
=================
1 | admin | admin123
-------------------------------
2 | juan | apple2
-------------------------------
3 | pepe | hd250
-------------------------------
4 | pedro | vilma


De momento, cuando recibes los datos desde el login actual de tu web, supongo que haces algo como esto:

$Usuario = $_POST['usuario'];
$Password = "$_POST['password'];

Y realizas la consulta para obtener el ID y trabajar con ese ID...

$row = mysql_fetch_row(mysql_query("SELECT id FROM usuarios WHERE usuario = '$Usuario' AND password = '$Password';"));

$ID = $row[0];

Y ahí obtienes el ID del user pepe y trabajas siempre con ese ID (caso hipotético actual, imagino que se debe aproximar algo a lo real)

Bueno... si en un caso así quieres integrar Facebook Connect, lo que puedes hacer es modificar la tabla y dejarla así:

id | usuario | password | fid
====================
1 | admin | admin123 | 0
--------------------------------
2 | juan | apple2 | 0
--------------------------------
3 | pepe | hd250 | 0
--------------------------------
4 | pedro | vilma | 0

Entonces cuando recibes el FID mediante la API, puedes agregarlo a la tabla de usuarios manteniendo el ID autonúmerico original, e ingresando el FID en el campo FID y el nombre del perfil en el campo usuario... después en vez de tratar de conseguir el ID haciendo un WHERE con el usuario y password, lo haces haciendo un WHERE con el FID...

$row = mysql_fetch_row(mysql_query("SELECT id FROM usuarios WHERE fid = '$fid';"));

Ahí obtendrías el ID autonúmero asignado por tu base, con el cual trabajarías de la misma forma en qué lo haces con el ID de los usuarios registrados, ya que es lo mismo :P

Saber que tipo de consulta hacer (WHERE usuario o WHERE fid) es cuestión de un poco de IF para comprobar desde donde vienen los datos y qué datos vienen.

De esta manera puedes integrar totalmente tu sitio con FacebookConnect sin tener que hacer nada más que agregar unas lineas al login.php y un campo a la tabla de usuarios.

Bueno, como imaginarás, esta no es la única forma de integrar FBConnect con tu sitio... hay muchas, todo depende de tu ingenio y habilidad para programar.

Espero que te haya servido!!

Estuve muucho tiempo escribiendo este post... es que hay muy poca info en Español y habiendo entendido un poco el tema después de largas noches de foros en inglés, me sentí en deuda con la comunidad de hablahispana

Si van a copiar este mini-manual, recuerden citar el autor

Autor: jabmaster

Saludos!!
  #2 (permalink)  
Antiguo 07/04/2009, 10:59
 
Fecha de Ingreso: abril-2009
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Respuesta: [APORTE] Usar Facebook Connect

muy Buen aporte.....muchas gracias jabmaster
  #3 (permalink)  
Antiguo 07/04/2009, 11:22
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: [APORTE] Usar Facebook Connect

Disculpa mi ignorancia, pero esto es que con tus datos de Facebook, cree un usuario?
o es para que siempre ingrese con los datos de facebook?

y como seria para que si el usuario no esta logeado lo mande al index?
  #4 (permalink)  
Antiguo 08/04/2009, 02:33
 
Fecha de Ingreso: marzo-2007
Mensajes: 14
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: [APORTE] Usar Facebook Connect

Cita:
Iniciado por PoLiZe Ver Mensaje
Disculpa mi ignorancia, pero esto es que con tus datos de Facebook, cree un usuario?
Claro, algo asi... la idea es que el visitante en vez de tener que registrarse en tu web e ingresar los mismos datos que en Facebook, directamente ingrese su email y pass de facebook y a vos te queden esos datos y le puedas asignar el ID como usuario, tal como si se estuviese registrando desde tu web.

Cita:
Iniciado por PoLiZe Ver Mensaje
o es para que siempre ingrese con los datos de facebook?
Y si, esa es la comodidad para el usuario.. que siempre ingrese con los datos de facebook... obviamente vos mediante programación checkeás si es el primer login (o sea, hacés de cuenta que es un registro y le asignás un ID) o checkéas si ya existe como usuario registrado y comenzás la sesión obteniendo el ID asignado previamente al ingresar al usuario a la base de datos.

Cita:
Iniciado por PoLiZe Ver Mensaje
y como seria para que si el usuario no esta logeado lo mande al index?
De la misma forma en que lo mandás al index ahora mismo sin utilizar FBConnect.

Al margen de esto, pensé que habían borrado mi post! Ya que ésto que ahora es un tema "aporte", en verdad era una respuesta a un tema que abrió un usuario; y hoy cuando entré a a mirar dicho tema, me sorprendí al notar que habían borrado mi respuesta... (finalmente resultó ser que está aquí como nuevo tema). Creo que el mod debería avisar cuando hace eso...


Saludos
  #5 (permalink)  
Antiguo 21/04/2009, 05:43
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: [APORTE] Usar Facebook Connect

Uf, lo he intentado pero me cuesta; sobretodo, podrías decir como configurar en facebook las urls de la aplicación en connect settings? esque me pierdo mucho..
  #6 (permalink)  
Antiguo 21/04/2009, 10:21
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: [APORTE] Usar Facebook Connect

ke coketo loco, grax :P
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #7 (permalink)  
Antiguo 22/04/2009, 06:56
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: [APORTE] Usar Facebook Connect

Bueno; lo he estado intentando...

bien, hasta ahora tengo tres ficheros para las sesiones: entra.php, sal.php y registra.php; de los que, creo, que para este tema basta tratar uno; el entra.php, verdad?

normalmente mis usuarios entran a una página que es panelcontrol.php y allí hasta ahora hacía:


<?
session_start();
if (isset($_SESSION['s_username'])) {
echo "Bienvenido a mi sitio has ingresado como ".$_SESSION['s_username'].", gracias por la visita!";
}else{
echo "Tu no estas autentificado dirígete a login.php o registrate en register.php";
header("location: sesiones/entra.php");
echo $_SESSION['s_username'];
} ?>


bien, y en entra.php:

Cita:
.
.
.
$query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
$row = mysql_fetch_array($query);
$_SESSION["s_username"] = $row['username'];
echo "Has sido logueado correctamente ".$_SESSION['s_username']." y puedes acceder al index.php.";
header("location: ../panelcontrol.php");
.
.
.
Entonces, lo que he hecho; ha sido en entra.php; justo debajo del formulario de entrada he añadido el boton de facebook connect;

y ahora, no me queda muy claro si debo poner esto en panelcontrol.php o entra.php:

Cita:
<? require_once '../facebook/facebook.php'; //Ruta de la api...
session_start();
$Aplicacion = 'laidedemiaplicación'; //No olvides ingresar la key de tu aplicación
$ClaveSecreta = 'miclavesecreta'; //No olvides ingresar la clave proporcionada por FB

$Facebook = new Facebook($Aplicacion, $ClaveSecreta);


If ($Facebook->get_loggedin_user())
{
$FID = $Facebook->require_login(); //obtenemos el id del user en FB

$user_details = $Facebook->api_client->users_getStandardInfo($FID, array('last_name','first_name')); //intentamos obtener un poco de información del perfil
$Nombre = $user_details[0]['first_name']; //Almacenamos los datos del array
$Apellido = $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido
$nombreusuario = $Nombre." ".$apellido;

$sql = " SELECT * FROM `users` WHERE idf=$FID ORDER BY fecha DESC";
$rs = mysql_query($sql, $con);
if(mysql_num_rows($rs)>0){

}else{
$sqlInsertNot = mysql_query("INSERT INTO users
(nombre, fid)
VALUES ('$nombreusuario', '$fid')",
$con) or die(mysql_error());
}

$_SESSION["s_username"] = $nombreusuario;





}






?>

La cosa es que, si intento iniciar mi sesión; la ventana ajax que se abre redirecciona a una que no existe... y si presiono F5 pues no detecta que he iniciado sesión...

luego lo voy a mirar con más detenimiento, pero, podeis decirme en qué página tengo que poner el último código? y si está bien lo que hago en él... :$


MILLONES de gracias :)
  #8 (permalink)  
Antiguo 23/04/2009, 06:05
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: [APORTE] Usar Facebook Connect

Hola chicos,

he estado mirandolo de nuevo; y bueno, he hecho algunos cambios y adivinad! no me funciona... :(
y encima, tampoco me funciona ya el inicio de sesión para usuarios ya registrados de la página...
En entra.php tengo el formulario de entrada, dónde soy remitido desde panelcontrol.php si la sesión no está iniciada (así)

panelcontrol.php


Código PHP:
<? 
  
if (isset($_SESSION['s_username'])) {
echo 
"Bienvenido a mi sitio has ingresado como ".$_SESSION['s_username'].", gracias por la visita!";
}else{
echo 
"Tu no estas autentificado dirígete a login.php o registrate en register.php";
header("location: sesiones/entra.php");   
echo 
$_SESSION['s_username'];
}  
?>

Esto debería servir para ambos tipos de inicio de sesión..... ¿verdad?


en entra.php tengo:


Código PHP:
<? require_once '../../facebook/facebook.php'//Ruta de la api...

$Aplicacion 'mikey'//No olvides ingresar la key de tu aplicación
$ClaveSecreta 'miclavesecreta'//No olvides ingresar la clave proporcionada por FB

$Facebook = new Facebook($Aplicacion$ClaveSecreta);  




session_start();



if (
$_POST['username'] && $_POST['enviar'] == "Login") {
    
//Comprobacion del envio del nombre de usuario y password
    
echo "boton pulsado</br>";
    
$username=$_POST['username'];
    
$password=$_POST['password'];
    if (
$password==NULL) {
        echo 
"La password no fue enviada";
    }else{
        
$query mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
        
$data mysql_fetch_array($query);
        if(
$data['password'] != $password) {
            echo 
"Login incorrecto";
        }else{
            
$query mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
            
$row mysql_fetch_array($query);
            
$_SESSION["s_username"] = $row['username'];
            echo 
"Has sido logueado correctamente ".$_SESSION['s_username']." y puedes acceder al index.php.";
            
header("location: ../panelcontrol.php"); 
            }
    }
} else {

    require_once 
'../../facebook/facebook.php'//Ruta de la api...
    
    
$Aplicacion '0'//No olvides ingresar la key de tu aplicación
    
$ClaveSecreta '0'//No olvides ingresar la clave proporcionada por FB
    
    
$Facebook = new Facebook($Aplicacion$ClaveSecreta);  
    
    if(
$Facebook->get_loggedin_user())
    {
          
$fid $Facebook->require_login(); //obtenemos el id del user en FB
                     
          
$user_details $Facebook->api_client->users_getStandardInfo($FID, array('last_name','first_name')); //intentamos obtener un poco de información del perfil
          
$Nombre $user_details[0]['first_name']; //Almacenamos los datos del array
          
$Apellido $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido
          
$nombreusuario $Nombre." ".$apellido;
          
          
$sql " SELECT * FROM `users` WHERE idf=$fid ORDER BY fecha DESC";
        
$rs mysql_query($sql$con);
        if(
mysql_num_rows($rs)>0){
            echo 
"hemos pasado por aqui"//el usuario ya había entrado alguna vez - no registro
        
}else{
             
$sqlInsertNot mysql_query("INSERT INTO users
                             (username, fid)
                             VALUES ('$nombreusuario', '$fid')"
,
                             
$con) or die(mysql_error()); // es la primera - registro
        
}
        
$_SESSION["s_username"] = $nombreusuario;     //inicio sesion?
        
echo "Has sido logueado correctamente ".$_SESSION['s_username']." y puedes acceder al index.php.";
        
header("location: ../panelcontrol.php"); 
        
        
header("location: ../panelcontrol.php");
    
    
    
    
    }  


?>
La cuestión es que:
-si inicio sesión con mi user y pass de usuario ya registrado, se me remite de nuevo a entra.php
-si intento iniciar la sesión con mi user/pass de facebook, la ventana ajax no se me abre y se me redirecciona a entra.php

Y Luego, en facebook, en las preferencias de la aplicación hay que configurar dos url
Connect URL: donde tengo puesta entra.php
Account Reclamation URL: donde tengo puesta panelcontrol.php

y ahora que lo pienso, en el script, dónde está en negrita, qué hay que poner.. ?

<fb:login-button length="long" onlogin="location.href='<? echo $_SERVER['REQUEST_URI'];?>'"></fb:login-button>
<script type="text/javascript" src="HTTP://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"></script>
<script type="text/javascript">
FB.init("j","xd_receiver.htm");
</script>


¿Una ayudita? por favor...


Un saludo y gracias!

Última edición por Bam_Margera; 24/04/2009 a las 01:39 Razón: había mi clave!!!!!!!!!
  #9 (permalink)  
Antiguo 24/04/2009, 01:57
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: [APORTE] Usar Facebook Connect

Bueno he conseguido solucionar mi antiguo inicio de sesión y creo es cuestión de una mini tontería que el inicio con facebook connect me funcion, la cosa es que yo no veo el problema...

panelcontro.php

Código PHP:
<? 
      session_start
(); 
    if (!isset(
$_SESSION['s_username'])) {
        
header("location: sesiones/entra.php");   
    }  
    
?>
Con esto, debería dejarme llegar al contenido tanto con uno como con otro, pues para cada tipo de sesión le doy $_SESSION['s_username'] = $data['username'];...

y en entra.php ( había un lio genial) ahora tengo:

Código PHP:
<? 




        session_start
();
        
        require_once 
'../../facebook/facebook.php'//Ruta de la api...
            
            
$Aplicacion '...........secret...'//No olvides ingresar la key de tu aplicación
            
$ClaveSecreta '...........secret...'//No olvides ingresar la clave proporcionada por FB
            
            
$Facebook = new Facebook($Aplicacion$ClaveSecreta);  
            

        [
COLOR="SeaGreen"]if ($_POST['username'] && $_POST['enviar'] == "Login"){[/COLOR]
        
//Comprobacion del envio del nombre de usuario y password
            
$username=$_POST['username'];
            
$password=$_POST['password'];
            if (
$password==NULL) {
                echo 
"<p>La password no fue enviada</p>";
            }else{
                
$query mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
                
$data mysql_fetch_array($query);
                if(
$data['password'] != $password) {
                    echo 
"<p>Login incorrecto</p>";
                }else{
                    
$_SESSION['s_username'] = $data['username'];
                    
header("location: ../panelcontrol.php"); 
                }
            }
           
            
            
        }[
COLOR="Green"]else  if($Facebook->get_loggedin_user()){[/COLOR]
                    echo 
"<p>Entramos en la condición 'get_loggedin_user'</p>";
                
$fid $Facebook->require_login(); //obtenemos el id del user en FB
                               
                
$user_details $Facebook->api_client->users_getStandardInfo($fid, array('last_name','first_name')); //intentamos obtener un poco de información del perfil
                
$Nombre $user_details[0]['first_name']; //Almacenamos los datos del array
                
$Apellido $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido
                
$nombreusuario $Nombre." ".$apellido;
                
                
$sql " SELECT * FROM `users` WHERE fid=$fid ORDER BY fecha DESC";
                      
$rs mysql_query($sql$con);
                if(
mysql_num_rows($rs)>0){
                    echo 
"<p>hemos pasado por aqui<p>"//el usuario ya había entrado alguna vez - no registro
                    
$_SESSION["s_username"] = $nombreusuario
                }else{
                    
$sqlInsertNot mysql_query("INSERT INTO users
                                     (username, fid)
                                     VALUES ('$nombreusuario', '$fid')"
,
                                     
$con) or die(mysql_error()); // es la primera - registro
                     
                    
$_SESSION["s_username"] = $nombreusuario;     //inicio sesion?
                    
header("location: http://laspruebasdetoni.netau.net/panelcontrol.php"); 
                    }  

            
            
            }
        
    
?>
El formulario de entrado, tanto normal como facebook connect está en entra.php también, el boton de fbcnnct, :

Cita:
<fb:login-button length="long" onlogin="location.href='<? echo $_SERVER['REQUEST_URI'];?>'"></fb:login-button>
<script type="text/javascript" src="HTTP://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"></script>
<script type="text/javascript">
FB.init("...........secret...","xd_receiver.htm");
</script>

Bueno, las url en las preferencias 'connect' de facebook, he cambiado simplemente a mi domino (http://laspruebasdetoni.netau.net/)

Me gustaría saber si las lineas coloreadas están en lugar correcto y escritas bien..

Síntomas:

-al iniciar con fbconnect -> se abre la ventana ajax, me logueo, y en la misma ventana se intenta cargar alguna web de mi domino, pero no me da tiempo a verla pues salta la página de mi hosting de cuando no ha encontrado... ¿sabeis como puedo ver la url que era? eso me ayudaría mucho, supongo...

-> Si después de esto, voy a facebook estoy directamente logueado; así que parece que el login funciona, solo que no estoy consiguiendo interpretarlo así en mi web....


Creo que todo depende de la URL que tenga en el texto que he puesto en rojo, en el botón; la comprobación de inicio de sesión, debería estar allí?

Bueno, a ver si alguien se anima... la solución le puede servir a todo el mundo... :$

un saludo, y gracias!
  #10 (permalink)  
Antiguo 26/04/2009, 06:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: [APORTE] Usar Facebook Connect

Buenas,

He cambiado la forma de hacerlo para tener un poco más de información de qué hace y qué no y el caso es que con este código nunca entra en la condición de facebook loegged in nos propone

Entra.php

Código PHP:
        <? 




        session_start
();
        if(
$_SESSION['logueado'])
            echo 
"<p>logueado</p>";
        else
                        echo 
"<p> no logueado</p>";
        
        require( 
'../../facebook/facebook.php'); //Ruta de la api...
            
            
$Aplicacion 'key'//No olvides ingresar la key de tu aplicación
            
$ClaveSecreta 'pass'//No olvides ingresar la clave proporcionada por FB
            
            
$Facebook = new Facebook($Aplicacion$ClaveSecreta);  
            
$logueado 0;
            
            [
B]if($Facebook->get_loggedin_user()){
                    echo 
"<p>Entramos en la condición 'get_loggedin_user'</p>";[/B]
                
//obtenemos el id del user en FB
                
try //probamos de obtener los datos de la sesión
                

                    
$fid $Facebook->require_login();                
                    
$user_details $Facebook->api_client->users_getStandardInfo($fid, array('last_name','first_name')); //intentamos obtener un poco de información del perfil
                    
$Nombre $user_details[0]['first_name']; //Almacenamos los datos del array
                    
$Apellido $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido
                    
$nombreusuario $Nombre." ".$apellido;
                    
$logueado 1;
                    
$_SESSION["s_username"] = $nombreusuario;
                    
$_SESSION['logueado'] = $logueado;
                        echo 
"<p>Usuario logueado - </p>".$_SESSION['s_username'];
                }
                catch(
Exception $e//Intentamos capturar algún error debido a si la sesión venció, o el usuario cerró sesión desde FB o cualquier otro motivo que haya producido la caducación de la sesión y por lo tanto un error
                   
{
                
$logueado 0//si es asi, si pasó algo de eso, informamos que entonces NO estamos logueados (antes por existir un $uid dijimos que lo estabamos)
                
echo "<p>catch exceptcion</p>";
                } 
                
$sql " SELECT * FROM `users` WHERE fid=$fid ORDER BY fecha DESC";
                      
$rs mysql_query($sql$con);
                if(
mysql_num_rows($rs)>0){
                    echo 
"<p>hemos pasado por aqui<p>"//el usuario ya había entrado alguna vez - no registro
                    
                
}else{
                    
$sqlInsertNot mysql_query("INSERT INTO users
                                     (username, fid)
                                     VALUES ('$nombreusuario', '$fid')"
,
                                     
$con) or die(mysql_error()); // es la primera - registro
                     
               //inicio sesion?
                    
                    
}  
        
        }

        if (
$_POST['username'] && $_POST['enviar'] == "Login"){
        
//Comprobacion del envio del nombre de usuario y password
            
$username=$_POST['username'];
            
$password=$_POST['password'];
            if (
$password==NULL) {
                echo 
"<p>La password no fue enviada</p>";
            }else{
                
$query mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
                
$data mysql_fetch_array($query);
                if(
$data['password'] != $password) {
                    echo 
"<p>Login incorrecto</p>";
                }else{
                    
$_SESSION['s_username'] = $username;
                    
$logueado 1
                    
$_SESSION['logueado'] = $logueado;
                    
                }
            }
           
            
            
        }
        if(
$logueado==1){
                
                    
$_SESSION["logueado"] = $logueado;
                    
header("Location: http://laspruebasdetoni.netau.net/php/panelcontrol.php"); 
                }else
                        echo 
"<p> no logueado end</p>";
Me estoy fijando en que se declara un objeto facebook cada vez que se carga la página; puede ser que se machaque info? o incluso que en los files de facebook utilice otro objeto o algo?

Esque ahora para el inicio normal y fb tengo las mismas variables y hago la comprobación al final, y con el primero funciona pero el segundo nunca (se abre la ventana ajax, se cierra -ya no va a ninguna url desconocida- y volvemos al entra.php sin ningun echo que 'hemos entrado en la condición') me remite al panel de control, bueno, de hecho nunca entra en la condición superior...

respecto a $_SESSION ya no se si el nombre de l variable 'usuario' o 'logueado' tiene que ir entre ' o entre " pues he visto de todo... (y no se por qué no lo encuentro en el manual de PHp :S)


HElp?

:D

--------------------edit---------------------

he decidido pasarle en onlogin otra url, que es entrafb.php

bien, el código de la misma es:


Código PHP:
        session_start();
            require( 
'../../facebook/facebook.php'); //Ruta de la api...    
        
$Aplicacion 'sdf'//No olvides ingresar la key de tu aplicación
        
$ClaveSecreta 'asd'//No olvides ingresar la clave proporcionada por FB

        
$Facebook = new Facebook($Aplicacion$ClaveSecreta);  

            try 
//probamos de obtener los datos de la sesión
                                

                                    
$fid $Facebook->require_login();                
                                    
                                    
$nombreusuario $Facebook->get_loggedin_user();
        } 
        
        catch(
Exception $e//Intentamos capturar algún error debido a si la sesión venció, o el usuario cerró sesión desde FB o cualquier otro motivo que haya producido la caducación de la sesión y por lo tanto un error
                                 
{
                                
$logueado 0//si es asi, si pasó algo de eso, informamos que entonces NO estamos logueados (antes por existir un $uid dijimos que lo estabamos)
                                
echo "<p>catch exceptcion</p>";
                                } 
        
        
$logueado 1;
                                    
$_SESSION['s_username'] = $nombreusuario;
                                    
$_SESSION['logueado'] = $logueado;
                                
                    
        if(
$logueado==1){
                
            
$_SESSION["logueado"] = $logueado;
            
header("Location: http://laspruebasdetoni.netau.net/php/panelcontrol.php"); 
        }else
            echo 
"<p> no logueado end</p>";
    
?> 

El caso es que al iniciar la sesion con fb connoect, me lleva a Facebook y me dice

Cita:
Tecla API inválida

La aplicación que intentas utilizar no existe o ha sido deshabilitada.
El caso es que en fb me puedo meter, en la aplicacion también, las keys id y clave estan bien puestas... :S:S:S

---edit---

solucionado!!!!!! con

entrafb.php

Código PHP:
session_start();
        require( 
'../../facebook/facebook.php'); //Ruta de la api...    
        
$Aplicacion 'fff'//No olvides ingresar la key de tu aplicación
        
$ClaveSecreta 'fff'//No olvides ingresar la clave proporcionada por FB

        
$Facebook = new Facebook($Aplicacion$ClaveSecreta);  
        
        
        
$fid $Facebook->require_login();     
        
$user_details = array();    
        
$user_details $Facebook->api_client->users_getInfo($fid, array('last_name','first_name','pic_big_with_logo','email'));
        
$first_name $user_details[0]['first_name'];    
        
$last_name $user_details[0]['last_name'];
        
$email $user_details[0]['email'];
        
$pic_url =  $user_details[0]['pic_big_with_logo'];
        
$nombreusuario $first_name." ".$last_name;
        
$logueado 1;        
        
$_SESSION['s_username'] = $nombreusuario;
        
$_SESSION['logueado'] = $logueado;
        
$sql " SELECT * FROM `users` WHERE fid=$fid ORDER BY fecha DESC";
        
$rs mysql_query($sql$con);
        
        if (empty(
$sql)) { 
        
                    
$sqlInsertNot mysql_query("INSERT INTO users
                             (username, email, fid)
                             VALUES ('$nombreusuario','$email', '$fid')"
,
                             
$con) or die(mysql_error()); // es la primera - registro
             
       //inicio sesion?
            
        
}  
        
header("Location: http://laspruebasdetoni.netau.net/php/panelcontrol.php"); 

qué cosas...

Última edición por Bam_Margera; 26/04/2009 a las 14:35
  #11 (permalink)  
Antiguo 27/05/2009, 01:35
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: [APORTE] Usar Facebook Connect

Muy buenas

alquien sabría decirme cómo debería hacerlo, con exactamente el mismo código más arriba?

pero en lugar de eso,

la página es keepyourinks.com, que es un dominio redireccionado a keepyourlinks.comxa.com; en el connect de facebook (developers) tengo las dos url: keepyourlinks.comxa.com; pero me va fatal (si alguien quiere probarlo keepyourlinks.com)

cuando el user hace loguin en el ajax; se carga una web de error de mi hosting... 000webhost

y la cosa es que ahora ya ni desde keepyourlinks.comxa.com funciona... :? y antes iba bien hasta en el .tk (compré .com ayer jeje)


boton fb:
___________


Cita:
<p>Entra con tu usario de facebook</p><hr /><br />
&nbsp;&nbsp;&nbsp;&nbsp; <fb:login-button onlogin="location.href='http://keepyourlinks.comxa.com/php/sesiones/entrafb.php'"></fb:login-button>
<script type="text/javascript" src="HTTP://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"></script>
<script type="text/javascript">
FB.init("**","http://keepyourlinks.comxa.com/php/sesiones/xd_receiver.htm");
</script>

Una ayudita (esta vez... ) :$
__________________
¿ya conoces la red social de cocina? descubre y comparte recetas de cocina
TONIWEB, un programador web freelance

Última edición por Bam_Margera; 27/05/2009 a las 02:13
  #12 (permalink)  
Antiguo 03/06/2009, 22:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 14
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: [APORTE] Usar Facebook Connect

Hola... hace mucho que no pasaba por el post... entré a tu web y veo que está el iconito de FBConnect... ¿Finalmente lo implementaste sin problemas?

Saludos!
  #13 (permalink)  
Antiguo 17/09/2009, 02:50
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Respuesta: [APORTE] Usar Facebook Connect

Hola Compañeros,

Este post me ha ayudado mucho, pero mí pregunta es:

Cuando mí usuario ya registrado en la página entra con su usuario de Facebook, ¿cómo puedo comprobar que ya es usuario registrado?

¿Podéis poner un ejemplo?

¡Gracias!
  #14 (permalink)  
Antiguo 02/12/2009, 06:53
Avatar de MisatoKatsuragi  
Fecha de Ingreso: abril-2009
Mensajes: 109
Antigüedad: 15 años
Puntos: 2
Respuesta: [APORTE] Usar Facebook Connect

Hola, espero que no se me enfaden por reflotar este post

estoy tratando de implementar fb connect pero no paso de conseguir hacer aparecer el dichoso boton (y ya me ha costado....) cuando lo pulso me refresca la pagina y ya esta

a ver, es para un oscommerce (y por favor, que no me diga nadie que el oller tiene uno que ya lo se.... quiero hacerlo yo misma y luego compartirlo con la comunidad) y esto es lo que he hecho:

he obtenido la api key y la secret key en fb,

tengo la aplicacion creada pero no enviada (pone que para enviarla al adirectorio tiene que tener 5 usuarios nuevos cada mes y blabla, y en realidad, no estoy haciendo una aplicacion de fb, estoy integrando el fbconnect en otro sitio, asi que supongo que eso no hace falta),

no he configurado mucho ahi porque no se que poner aparte del dominio donde lo estoy tratando de usar,

en la cabecera (aplication_top para los que conozcan osc), donde compruebo si el visitante esta logueado o no he añadido esto, sacado del tuto de fb:

Cita:
/*fb connect*/
include_once 'fbconnect/config.php'; //has $api_key and $secret defined.
include_once 'facebook-platform/facebook-client4/facebook.php';
global $api_key,$secret;
$fb=new Facebook($api_key,$secret);
$fb_user=$fb->get_loggedin_user();
he subido a la raiz una carpeta facebook-platformcon el contenido la API y en el archivo config (en fbconnect) he puesto mi apikey, ip de la base de datos y todo eso

he creado la tabla que dice en la propia api en la base de datos

he subido tb a la raiz el xd_receiver.htm

he añadido en login.php el codigo expuesto en el primer post de este hilo

el resultado??? como dije, sale el boton pero al picar soo refresca, nada mas. alguien sabria decirme por donde continuar? GRACIAS
  #15 (permalink)  
Antiguo 27/12/2009, 08:05
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: [APORTE] Usar Facebook Connect

muy bueno el ejemplo. lo voy a implementar en mi web.

ahora, lo que se me ocurrió es lo siguiente.

Siendo twitter tambien la red social más usada, se puede hacer que si ingresa el usuario de Facebook o Twitter logee?

habria que agregar una función que chekee en twitter tambien el usuario y que si no está registrado en la web nuestra tambien le asigne una id?
  #16 (permalink)  
Antiguo 03/03/2010, 08:18
Avatar de ddblack6  
Fecha de Ingreso: diciembre-2009
Ubicación: Avellaneda, Buenos Aires
Mensajes: 11
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: [APORTE] Usar Facebook Connect

Pude hacer que funcione!!!!!.. subo un ejemplo a un link con todo y funcionando http://www.okeyko.com/facebook.rar
  #17 (permalink)  
Antiguo 18/03/2010, 20:50
 
Fecha de Ingreso: diciembre-2007
Mensajes: 169
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: [APORTE] Usar Facebook Connect

Mi problema esta en la línea

If ($Facebook->get_loggedin_user())

nunca entra, aunque el usuario este registrado, no se que sucede me logueo lo más bien pero al momento de actualizar la pagina no entra tampoco al if!!!! que puedo hacer!!!!

alguien sabe porque sale ese error!
__________________
Inspiracion
  #18 (permalink)  
Antiguo 29/03/2010, 01:42
 
Fecha de Ingreso: marzo-2010
Mensajes: 5
Antigüedad: 14 años
Puntos: 0
Respuesta: [APORTE] Usar Facebook Connect

Exelente aporte funciona de marvilla, :apla uso:
  #19 (permalink)  
Antiguo 08/04/2010, 03:17
 
Fecha de Ingreso: abril-2010
Mensajes: 6
Antigüedad: 14 años
Puntos: 0
Respuesta: [APORTE] Usar Facebook Connect

tengo un peuqeño problemilla.

cuando hago login en el popup la pagina se redirige automaticamente al index pero dentro del popup, no de la ventana padre.

alguien me puede ayudar?


gracias!
  #20 (permalink)  
Antiguo 09/04/2010, 03:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Hola,

Así como cogéis los datos de nombre y apellido en:

$Nombre = $user_details[0]['first_name']; //Almacenamos los datos del array
$Apellido = $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido

¿Alguien sabe cómo coger los datos de imagen de perfil y correo electrónico?

Gracias!

Cita:
Iniciado por sitoatic Ver Mensaje
Hola,

Así como cogéis los datos de nombre y apellido en:

$Nombre = $user_details[0]['first_name']; //Almacenamos los datos del array
$Apellido = $user_details[0]['last_name']; //Seguimos con la matriz, esta vez almacenamos el Apellido

¿Alguien sabe cómo coger los datos de imagen de perfil y correo electrónico?

Gracias!


Hola, me autorespondo, aquí están los datos que se pueden extraer:

http://wiki.developers.facebook.com/.../Users.getInfo

SAludos,

Última edición por GatorV; 09/04/2010 a las 08:48
  #21 (permalink)  
Antiguo 19/06/2010, 23:43
Avatar de jose mario  
Fecha de Ingreso: abril-2007
Mensajes: 165
Antigüedad: 17 años
Puntos: 0
Respuesta: [APORTE] Usar Facebook Connect

Hola que bueno leer esto pero algo que yo nesecito es solo el correo por que en mi sistema de login solo pido correo y contraseña ya que facebook me regrese el correo en una variable seria bueno. como lo hago
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.
Tema Cerrado

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 05:02.