Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/12/2010, 15:56
danneg
Invitado
 
Mensajes: n/a
Puntos:
Exclamación Loguear con facebook

Hola y muy buenas (tardes, dias, noches)

Bien, hace tiempo que ya no tengo un problema y/o duda, pero en esta ocasion ya me atore demasiado



Bien, lo que trato de hacer, es justamente lo que dice el titulo, loguear con facebook

clasico, logueo y registro

bien, creo que me he complicado bastante en estos puntos

lo que estoy haceindo es lo siguiente
  1. abrir secion de facebook
  2. obtener datos
  3. enviarlos por post via ajax par comproar existencia de usuario
  4. si el usuario existe lo logueo
  5. si no lo invito a registrarse

todo lo hago mediante ajax con ayuda de jquery (jaja que tramposo XD)

el login de facebook unicamente lo uso para obtener el id de usuario

osea el login sera un tipico user pass

en este caso el user es el id de facebook del usuario y el pass se genera en tiempo real

el problema aqui es que no se logra loguearse bien a una persona

el login de facebook fucniona bien, pero el mio es el que no

lo pueden checar aqui

http://dannegm.com (para los que se logren loguear, les mostrara un panel de escritura libre del blog, no comenten eso, aun no desarrollo la identificacion de tipo de usuarios (claro no puedo loguear usurios aun :P))

a continuacion les dejo el codigo que utilizo para hacer esto con comentarios y explicaciones
-------------------------------------------------------------------------------------
en el index llamo este archivo con php (include), que es el que se encarga de todo el login
facebookConnect.php
Código Javascript:
Ver original
  1. <a href="#" id="login">Entrar con facebook</a>
  2. <div id="fb-root"></div>
  3. <script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
  4. <script type="text/javascript">
  5.     var nombre;
  6.     var link;
  7.     var imagen;
  8.     FB.init({
  9.         appId: 'MIIDDEAPPFACEBOOK',
  10.         status: true,
  11.         cookie:true,
  12.         xfbml: true
  13.     });
  14.     document.getElementById('login').addEventListener('click', function (e) {
  15.         e.preventDefault();
  16.         FB.login(function (response) {
  17.             if (response.session) {
  18.                 var fb_idUser;
  19.                 var fb_name;
  20.                 var fb_about;
  21.                 var fb_link;
  22.                 var fb_pic;
  23.                 var fb_genere;
  24.                 document.getElementById('login').removeEventListener('click', arguments.callee, false);
  25.                 FB.api('/me', function (usuario) {
  26.                     console.log(usuario);
  27.                     fb_idUser = usuario.id;
  28.                     fb_name = usuario.name;
  29.                     fb_about = ""; // Lo dejo en blanco por correccion... despues lo reparo
  30.                     fb_link = usuario.link;
  31.                     fb_genere = usuario.gender;
  32.                 });
  33.                 FB.Data.query('SELECT pic FROM user WHERE uid = me()').wait(function (filas) {
  34.                     fb_pic = filas[0].pic;
  35.                 });
  36.  
  37.                 // A partir de aqui explico
  38.                 $.post( //Compruebo si el usuario existe enmi base de datos
  39.                     "fb/fb-comprobar.php",
  40.                     {
  41.                         idUser: fb_idUser
  42.                     },
  43.                     function(resultado){
  44.                         if(resultado != "false"){ //Si existe
  45.                             //post a login
  46.                             $.post( // Trato de hacer login
  47.                                 "fb/fb-login.php",
  48.                                 {
  49.                                     idUser: fb_idUser, // Usuario (id de facebook)
  50.                                     pass: resultado // Contraseña (generada en tiempo real, la imprime en el callback y lo guarda en una cookie
  51.                                 },
  52.                                 function(login){ // Resibe la contraseña generada
  53.                                     if(login != "false"){ // Si la contraseña coincide con el cookie, se loguea correctamente al usuario
  54.                                         msgAlert("Estas logueado!!");
  55.                                         location.href= "http://dannegm.com";
  56.                                     }else{ // Si no, mostrar error de logueo
  57.                                         msgAlert("Ha ocurrido un incombeniente a la hora de loguear!","Error");
  58.                                     }
  59.                                 }
  60.                             );
  61.                         }else{ // Si el usuario no existe en mi bd
  62.                                     // Invitarlo a registrarse
  63.                             msgConfirm("Actualmente no estas registrado en este sitio, para poder comentar, publicar y demas cosas debes registrarte.<br /><br />¿Deseas hacerlo?","Registrate",
  64.                                 function(result){
  65.                                     if(result==true){ // Si acepta, obtengo sus datos de facebook y los registro y lo logueo
  66.                                         $.post(
  67.                                             "fb/fb-register.php",
  68.                                             {
  69.                                                 idUser: fb_idUser,
  70.                                                 name: fb_name,
  71.                                                 about: fb_about,
  72.                                                 link: fb_link,
  73.                                                 pic: fb_pic,
  74.                                                 genere: fb_genere
  75.                                             },
  76.                                             function(login){
  77.                                                 if(login != "false"){
  78.                                                     msgAlert("Estas logueado!!");
  79.                                                     location.href= "http://dannegm.com";
  80.                                                 }else{
  81.                                                     msgAlert("No estas logueado!!");
  82.                                                 }
  83.                                             }
  84.                                         );
  85.                                     } // Si no, simplemente no se hace el logueo
  86.                                 }
  87.                             );
  88.                         }
  89.                     }
  90.                 );
  91.             }
  92.         });
  93.     }, false);
  94. </script>

Este archivo comprueba existencia de usuario y genera la contraseña
fb/fb-comprobar.php
Código PHP:
Ver original
  1. <?php
  2.     include("../includes/config.php");  // Incluir los datos de conexion mysql
  3.  
  4.     $idUser = $_POST["idUser"]; // Resivir el id del usuario
  5.  
  6.     // Establecer conexion a MySQL
  7.     $conexion = mysql_connect($servidor, $usuario, $clave);
  8.     if (!$conexion){
  9.         die("Fallo la conexión a la Base de Datos: " . mysql_error());
  10.     }
  11.  
  12.     // Estableser conexion a la base de datos
  13.     $seleccionar_bd = mysql_select_db($basedatos, $conexion);
  14.     if (!$seleccionar_bd){
  15.         die("Fallo la selección de la Base de Datos: " . mysql_error());
  16.     }
  17.  
  18.     // Generar consulta, buscamos al usuario en la base de datos
  19.     $sql = "SELECT id FROM usuarios WHERE id='" . $idUser . "'" ;
  20.  
  21.     // Ejecutar consulta
  22.     $query = mysql_query($sql);
  23.  
  24.     if(mysql_num_rows($query)<0) {
  25.         //No existe usuario
  26.         die("false");
  27.     }else{
  28.         //Existe usuario y devuelve la contraseña
  29.         mt_srand(time());
  30.         $pass = mt_rand(0,99999999);
  31.         setcookie("pass", $pass, time()+(60*60*5));
  32.         die($pass);
  33.     }
  34.  
  35. ?>

Este archivo hace la validacion de datos y permite el login
fb/fb-login.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.     $idUser = $_POST["idUser"]; // Resivo id de usuario
  4.     $pass = $_POST["pass"]; // Resivo contraseña anteriormente generada
  5.     if ($pass == $_COOKIE["pass"]){ // Si la contraseña es correcta
  6.         include("../includes/config.php");
  7.  
  8.         // Establecer conexion a MySQL
  9.         $conexion = mysql_connect($servidor, $usuario, $clave);
  10.         if (!$conexion){
  11.             die("Fallo la conexión a la Base de Datos: " . mysql_error());
  12.         }
  13.  
  14.         // Establecer conexion a la bd
  15.         $seleccionar_bd = mysql_select_db($basedatos, $conexion);
  16.         if (!$seleccionar_bd){
  17.             die("Fallo la selección de la Base de Datos: " . mysql_error());
  18.         }
  19.  
  20.         // Obtengo el nombre del usuario
  21.         $sql = "SELECT nombre FROM usuarios WHERE id = '" . $idUser . "'";
  22.         $query = mysql_query($sql);
  23.         if($row = mysql_fetch_array($query)){
  24.             $name = $row['nombre'];
  25.         }
  26.  
  27.         // Logueo al usuario, guardo la secion abierta (true), el id de usuario y su nombre
  28.         setcookie("login", "true", time()+(60*60*24*7*4));
  29.         setcookie("idUser", $idUser, time()+(60*60*24*7*4));
  30.         setcookie("name", $name, time()+(60*60*24*7*4));
  31.     }else{
  32.         // Si la contraseña es incorrecta (por algun span, usuario malisioso, etc)
  33.         die("false"); // Devolver falso
  34.     }
  35. ?>

Y finalmente este archivo hace el registro del usuario
fb/fb-register.php
Código PHP:
Ver original
  1. <?php
  2.     // Declaro los datos que voy a registrar
  3.     $idUser = $_POST["idUser"];
  4.     $name = $_POST["name"];
  5.     $about = $_POST["about"];
  6.     $link = $_POST["link"];
  7.     $pic = $_POST["pic"];
  8.     $genere = $_POST["genere"];
  9.  
  10.     $age = "1993-04-01";
  11.     $email = "[email protected]";
  12.     $tipo = "normal";
  13.     $nombreautor = "unname";
  14.     $date = date("Y-m-d");
  15.  
  16.     // Conecto a bd
  17.     include("../includes/config.php");
  18.  
  19.     $conexion = mysql_connect($servidor, $usuario, $clave);
  20.     if (!$conexion){
  21.         die("Fallo la conexión a la Base de Datos: " . mysql_error());
  22.     }
  23.  
  24.     $seleccionar_bd = mysql_select_db($basedatos, $conexion);
  25.     if (!$seleccionar_bd){
  26.         die("Fallo la selección de la Base de Datos: " . mysql_error());
  27.     }
  28.  
  29.     // Inserto los datos en el registro
  30.     $sql = "INSERT INTO usuarios (id, nombre, nombredeautor, email, urlfoto, urlperfil, edad, sexo, fechaderegsitro, tipo) VALUES ('" . $idUser . "', '" . $name . "', '" . $nombreautor . "', '" . $email . "', '" . $pic . "', '" . $link . "', '" . $age . "', '" . $genere . "', '" . $date . "', '" . $tipo . "')";
  31.     $query = mysql_query($sql);
  32.     if (!$query){
  33.         die("Fallo el registro: " . mysql_error());
  34.     }else{
  35.         // Si todo fue correcto, logeo al usuario
  36.         die("Exito!!");
  37.         setcookie("login", "true", time()+(60*60*5));
  38.         setcookie("idUser", $idUser, time()+(60*60*5));
  39.         setcookie("name", $name, time()+(60*60*5));
  40.     }
  41. ?>

Nota: msgAlert(); y msgConfirm(); son mis verciones de los famosos Alert(); y Confirm();
-------------------------------------------------------------

Bien, si alguien tiene idea de donde esta mi problema (que creo que esta en el archivo de comprovacion) por favor ayudenme

Seguire invetigando mi error, y tratar de solucionarlo

Igual cualquier duda y/o sugerencia decirme!!

Todos los comentarios productivos (me agraden o no) son bienvenidos!!

de antemano gracias!!