Cómo autentificar usuario con Facebook Connect en PHP y MySQL 4/4

El proceso de autenticación tiene tres fases:

  1. El script genera una url preguntando por los permisos del usuario.
  2. Facebook retorna una url con los parámetros solicitados vía GET.
  3. Los parámetros pasados por GET, autentifican la sesión.

Hagamos una prueba de logueo rápida para ver si todo esta correcto por ahora. Creamos un archivo llamado “login_Face.php” y guardamos en la misma ruta el archivo facebook.php que hemos obtenido:

[PHP]
# Requerimos la librería
require(“facebook.php”);

# Cramos el objeto Facebook indicando nuestros datos de API
$facebook = new Facebook(array(
‘appId’ => ‘YOUR_APP_ID’,
‘secret’ => ‘YOUR_APP_SECRET’,
‘cookie’ => true
));

# Comprueba si has iniciado sesión
$session = $facebook->getSession();

if(!empty($session)) {
# Activa la sesión, y obtiene el USERID con (getUser()) y la información del usuario con (api->(‘/me’)
try{
$uid = $facebook->getUser();
$user = $facebook->api(‘/me’);
} catch (Exception $e){}

if(!empty($user)){
# Si la info es correcta, lo imprimimos (en este lugar es donde podemos añadir las rutinas de login y registro)
print_r($user);
} else {
# Si hay un error, “matamos” el script
die(“There was an error.”);
}
} else {
# Si la sesión no está activada la generamos
$login_url = $facebook->getLoginUrl();
header(“Location: “.$login_url);
}
[/PHP]

Una vez tenemos listo el archivo “login_Face.php” lo ejecutamos desde el navegador, por ejemplo en mi caso sería:

http://localhost/tuto_facebook/login_Face.php

Si al ejecutar este archivo nos redirige hacia Facebook pidiéndonos las credenciales vamos por buen camino.

Posibles errores de Facebook Connect

Entre los posibles errores que te puedes encontrar al hacer ejecutar el archivo “login_face.php” son:

  1. Si al redirigir a Facebook nos sale un error, hay que revisar la configuración.
  2. “Uncaught CurlException: 60: SSL certificate problem, verify that the CA cert is OK”: En este caso la solución sería, abrir el archivo facebook.php y en el método makeRequest() buscar la línea donde pone:

    [php]
    $opts = self::$CURL_OPTS;
    [/PHP]

    y añadir justo después

    [PHP]
    opts[CURLOPT_SSL_VERIFYPEER] = false;
    [/PHP]

Una vez tenemos bien la conexión entre nuestro archivo y Facebook, vamos a utilizarlo con nuestra base de datos. Así que para poder interactuar, lo primero que haremos será conectarnos a la base de datos:

[php]
# Tenemos una session activa; Comprobamos si el usuario ya está registrado.
$query = mysql_query(“SELECT * FROM users WHERE oauth_provider = ‘facebook’ AND oauth_uid = “. $user[‘id’]);
$result = mysql_fetch_array($query);

# SI no, lo añadimos a la base de datos
if(empty($result)){
$query = mysql_query(“INSERT INTO users (oauth_provider, oauth_uid, username) VALUES (‘facebook’, {$user[‘id’]}, ‘{$user[‘name’]}’)”);
$query = msyql_query(“SELECT * FROM users WHERE id = ” . mysql_insert_id());
$result = mysql_fetch_array($query);
}
[/php]

Lo siguiente que vamos hacer es trabajar con el registro y autenticación de los usuarios. Es ahora cuando vamos a utilizar nuestra base de datos.

Como siempre, lo primero es conectarnos a la base de datos y comprobar si el usuario está registrado, en el caso que no lo esté, habrá que insertarlo:

[php]
//conectamos cno la base de datos con nuestras credenciales host, usuario y password.
mysql_connect(‘tuhost’, ‘tu_usuario’, ‘tu_password’);

//Seleccionamos nuestra base de datos
mysql_select_db(‘tu_basededatos’);
//Comprobamos si el usuario existe
$query = mysql_query(“SELECT * FROM users WHERE oauth_provider = ‘facebook’ AND oauth_uid = “. $user[‘id’]);
$result = mysql_fetch_array($query);
//Si no existe, lo añadimos a la tabla “users”
if(empty($result)){
$query = mysql_query(“INSERT INTO users (oauth_provider, oauth_uid, username) VALUES (‘facebook’, {$user[‘id’]}, ‘{$user[‘name’]}’)”);
$query = msyql_query(“SELECT * FROM users WHERE id = ” . mysql_insert_id());
$result = mysql_fetch_array($query);
}
[/php]

Con esto ya tendríamos creado el usuario en la base de datos, pero se nos olvida algo ¿verdad?, pues sí, se nos olvida la sesión, ya que si el usuario existe en la base de datos, tenemos que crearla, por eso hemos vuelto ha hacer una consulta a “users” para así tener en la variable result los datos.
Comprobamos si la variable result tiene datos, en tal caso creamos la sesión. Esto lo tenemos que añadir justo después del código mostrado más arriba:

[php]
if(!empty($user)){
# …

if(empty($result)){
# …
}

# Crear los valores de la sesión con los datos de Facebook connect
$_SESSION[‘id’] = $result[‘id’];
$_SESSION[‘oauth_uid’] = $result[‘oauth_uid’];
$_SESSION[‘oauth_provider’] = $result[‘oauth_provider’];
$_SESSION[‘username’] = $result[‘username’];
}
[/php]

Ahora que tenemos todos los datos necesarios en la variable session ya podemos utilizarlo en toda nuestra aplicación.

Con esto, ya hemos completa este tutorial sobre como loguear a un usuario con Facebook connect en nuestra página web. Espero que os haya gustado.

Vía: Nettuts