Blog
Las APIs de las redes sociales son cada vez más utilizadas en los sitios webs, es por ese motivo que en este tutorial aprenderemos a realizar un login con Facebook en PHP utilizando el SDK oficial.
Antes de comenzar a programar en PHP es necesario tener creada una aplicación en Facebook, esto lo podemos hacer desde el sitio https://developers.facebook.com. Luego de crear la aplicación web se proporcionará un APP ID, API Version y un App Secret que utilizaremos luego.
¿Cómo hacer un login con Facebook en PHP?
Primero debemos descargar el SDK de Facebook para PHP desde https://github.com/facebook/facebook-php-sdk-v4/archive/5.0.0.zip, el cual utilizaremos en este tutorial.
Luego de descomprimirlo y ubicarlo en nuestro directorio podemos empezar a programar nuestro login con Facebook en PHP.
Para esto vamos a crear los archivos login.php y fb-callback.php con sus respectivos códigos, luego debemos remplazar el APP ID, API Version y App Secret por los que aparecen en nuestra aplicación de Facebook. Además de incluir los paths correctos según nuestros directorios.
Creamos un archivo login.php e incluimos:
<?php /* Iniciando la sesión*/ session_start(); /* Cambiar según la ubicación de tu directorio*/ require_once __DIR__ . '/facebook/src/Facebook/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => 'Su App ID', 'app_secret' => 'Su App Secret', 'default_graph_version' => 'v2.4', ]); $helper = $fb->getRedirectLoginHelper(); $permissions = ['email']; // Permisos opcionales $loginUrl = $helper->getLoginUrl('https://localhost/webs/ejemplos/facebook/fb-callback.php', $permissions); /* Link a la página de login*/ echo '<a href="' . htmlspecialchars($loginUrl) . '">Login con Facebook!</a>'; ?>
Creamos un archivo fb-callback.php e incluimos:
<?php /* Iniciando la sesión*/ session_start(); /* Cambiar según la ubicación de tu directorio*/ require_once __DIR__ . '/facebook/src/Facebook/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => 'Su App ID', 'app_secret' => 'Su App Secret', 'default_graph_version' => 'v2.4', ]); $helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { // Cuando Graph devuelve un error echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { // Cuando la validación falla echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } if (! isset($accessToken)) { if ($helper->getError()) { header('HTTP/1.0 401 Unauthorized'); echo "Error: " . $helper->getError() . "\n"; echo "Error Code: " . $helper->getErrorCode() . "\n"; echo "Error Reason: " . $helper->getErrorReason() . "\n"; echo "Error Description: " . $helper->getErrorDescription() . "\n"; } else { header('HTTP/1.0 400 Bad Request'); echo 'Bad request'; } exit; } // Logged in echo '<h3>Access Token</h3>'; var_dump($accessToken->getValue()); // El controlador de cliente de OAuth 2.0 nos ayuda a gestionar los tokens de acceso $oAuth2Client = $fb->getOAuth2Client(); $tokenMetadata = $oAuth2Client->debugToken($accessToken); echo '<h3>Metadata</h3>'; var_dump($tokenMetadata); // Validación (esto lanzará FacebookSDKException cuando falla ) // $tokenMetadata->validateAppId($config['app_id']); // Si se conoce el ID de usuario de este token de acceso, puede validarlo aquí // $tokenMetadata->validateUserId('123'); $tokenMetadata->validateExpiration(); if (! $accessToken->isLongLived()) { // Cambiando un token de acceso de corta duración por uno de larga vida try { $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); } catch (Facebook\Exceptions\FacebookSDKException $e) { echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>"; exit; } echo '<h3>Long-lived</h3>'; var_dump($accessToken->getValue()); } $_SESSION['fb_access_token'] = (string) $accessToken; ?>
Luego para probar estos códigos debemos ingresar con nuestro navegador a la página de login.php, ahí debemos hacer click en el enlace para iniciar sesión.
Buenos hemos llegado al final de este tutorial, espero que les sea de gran utilidad. Ante cualquier problema no duden en dejar un comentario.
Hola, super este tutorial.
Tengo una consulta, para móviles (Android iOS) debo hacer un webservice de login. Me dicen que el apk para estos dos tecnologías no es lo mismo y diferente a como se hace en web, porfa me ayudarías a saber que debo hacer, cuales son los pasos lógicos a tener en cuenta para desarrollar este servicio en php, estoy utilizando Codeigniter framework.
Gracias.
Hola Gilbert, programar una aplicación nativa para Android y iOS es completamente diferente (incluyendo los lenguajes que se utilizan), pero en tu caso si solamente tenés que desarrollar un webservice simplmemente podés hacer una API, ya que se puede consumir desde las dos plataformas.
No entiendo me sale un error:
“Parse error: syntax error, unexpected ‘[‘, expecting ‘)’ in C:\AppServ\www\Cara-Sello\login.php on line 9”
Hola Romina, que versión de PHP tenes instalada? Si tenes una versión vieja puede ser que no esté soportando la forma de crear un array. Fijate probando lo siguiente:
En lugar de:
En todos los lugares donde aparece. Cualquier cosa avisame.
Hola, ¿cómo estas?
Me puedes ayudar con este error que me sale :/
Notice: Undefined offset: 1 in /Applications/XAMPP/xamppfiles/htdocs/fb/fbsdk4-5.1.2/src/Facebook/Http/GraphRawResponse.php on line 108
Catchable fatal error: Argument 4 passed to Facebook\FacebookResponse::__construct() must be of the type array, null given, called in /Applications/XAMPP/xamppfiles/htdocs/fb/fbsdk4-5.1.2/src/Facebook/FacebookClient.php on line 225 and defined in /Applications/XAMPP/xamppfiles/htdocs/fb/fbsdk4-5.1.2/src/Facebook/FacebookResponse.php on line 75
Buenos días,
He usario este código y me gustaría saber que cambios debo de hacer para obtener el nombre y foto del usuario que se ha conectado. ¿Eso es posible?
Gracias.
[…] Login con Facebook en PHP – Cursos de Programación de 0 a … […]
Intenté todo, pero me sale el error:
“No se puede cargar la URL: El dominio de esta URL no está incluido en los dominios de la app. Para poder cargar esta URL, agrega todos los dominios y subdominios de tu app en el campo “Dominios de la app” en la configuración de la app.”
No he encontrado la solución y ya agregué todas las varientes del dominio y subdominio en FacebookDeveloper.