Este documento te guía en el proceso de implementación del inicio de sesión con Facebook mediante el SDK de Facebook para JavaScript en tu página web.
Necesitarás lo siguiente:
El siguiente ejemplo de código muestra cómo añadir el SDK de Facebook para JavaScript a tu página web y cómo inicializarlo. Si tienes la sesión iniciada en Facebook, mostrará tu nombre y tu correo electrónico. Si no tienes la sesión iniciada en Facebook, la ventana emergente del cuadro de diálogo de inicio de sesión se mostrará automáticamente.
El permiso public_profile , que te permite obtener información pública como el nombre y la foto de perfil, y el permiso email no requieren la revisión de la aplicación y se conceden automáticamente a todas las aplicaciones que usen el inicio de sesión con Facebook.
<!DOCTYPE html> <html lang="en"> <head></head> <body> <h2>Add Facebook Login to your webpage</h2> <!-- Set the element id for the JSON response --> <p id="profile"></p> <script> <!-- Add the Facebook SDK for Javascript --> (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk') ); window.fbAsyncInit = function() { <!-- Initialize the SDK with your app and the Graph API version for your app --> FB.init({ appId : '{your-facebook-app-id}', xfbml : true, version : '{the-graph-api-version-for-your-app}' }); <!-- If you are logged in, automatically get your name and email adress, your public profile information --> FB.login(function(response) { if (response.authResponse) { console.log('Welcome! Fetching your information.... '); FB.api('/me', {fields: 'name, email'}, function(response) { document.getElementById("profile").innerHTML = "Good to see you, " + response.name + ". i see your email address is " + response.email }); } else { <!-- If you are not logged in, the login dialog will open for you to login asking for permission to get your public profile and email --> console.log('User cancelled login or did not fully authorize.'); } }); }; </script> </body> </html>
En el panel de aplicaciones, elige tu aplicación y desplázate a Añadir un producto. Haz clic en Configurar en la tarjeta Inicio de sesión con Facebook. Selecciona Configuración en la ventana de navegación de la izquierda y, debajo de Configuración del cliente de OAuth, introduce tu URL de redireccionamiento en el campo URI de redireccionamiento de OAuth válidos para que la autorización se realice correctamente.
Para indicar que utilizas el SDK de JavaScript para el inicio de sesión, configura el botón Inicio de sesión con el SDK para JavaScript en “sí”. Después, introduce el dominio de la página que aloja el SDK en la lista de dominios permitidos para el SDK para JavaScript. Esto garantiza que los identificadores de acceso solo responderán a las devoluciones de llamada de los dominios autorizados. Solo se admiten páginas HTTPS para las acciones de autenticación con el SDK de Facebook para JavaScript.
Cuando se carga la página web, el primer paso es determinar si el usuario ya tiene la sesión iniciada en ella con el inicio de sesión con Facebook. Una llamada a FB.getLoginStatus
inicia una llamada a Facebook para obtener el estado de inicio de sesión. Después, Facebook llama con los resultados a tu función de devolución de llamada.
FB.getLoginStatus(function(response) { statusChangeCallback(response); });
{ status: 'connected', authResponse: { accessToken: '{access-token}', expiresIn:'{unix-timestamp}', reauthorize_required_in:'{seconds-until-token-expires}', signedRequest:'{signed-parameter}', userID:'{user-id}' } }
status
especifica el estado de inicio de sesión de la persona que utiliza la página web. El valor de status
puede ser uno de los siguientes:
Tipo de Status | Descripción |
---|---|
| La persona ha iniciado sesión en Facebook y en tu página web. |
| La persona ha iniciado sesión en Facebook, pero no en tu página web. |
| La persona no ha iniciado sesión en Facebook, de modo que no sabes si lo ha hecho en tu página web. O bien, se llamó a FB.logout() antes, lo que impide conectarse a Facebook. |
Si el estado es connected
, se incluyen los parámetros de authResponse
siguientes en la respuesta:
Parámetros de authResponse | Valor |
---|---|
| Identificador de acceso de la persona que usa la página web. |
| Marca de tiempo UNIX que indica cuándo caduca el identificador. Una vez que caduca el identificador, la persona tiene que volver a iniciar sesión. |
| Período de tiempo antes de que caduque el inicio de sesión y la persona necesite volver a iniciar sesión, en segundos. |
| Parámetro firmado que contiene información sobre la persona que usa la página web. |
| Identificador de la persona que usa la página web. |
El SDK para JavaScript detecta automáticamente el estado de inicio de sesión, de modo que no tienes que hacer ninguna acción para activar este comportamiento.
Si una persona abre tu página web, pero no está conectada o no ha iniciado sesión con Facebook, puedes utilizar el cuadro de diálogo de inicio de sesión para solicitarle que lo haga. Si la persona no ha iniciado sesión en Facebook, se le pedirá que lo haga y, después, que inicie sesión en tu página web.
Una persona puede iniciar sesión de dos modos:
Si deseas utilizar el botón de inicio de sesión con Facebook, emplea nuestro configurador del plugin para personalizar el botón de inicio de sesión y obtener el código.
Para utilizar tu propio botón de inicio de sesión, invoca el cuadro de diálogo de inicio de sesión con una llamada a FB.login()
.
FB.login(function(response){ // handle the response });
Cuando una persona hace clic en tu botón HTML, se muestra una ventana emergente con el cuadro de diálogo de inicio de sesión. Este cuadro de diálogo te permite pedir permiso para acceder a los datos de una persona. El parámetro scope
se puede pasar junto con la llamada a la función FB.login()
. Este parámetro opcional es una lista de permisos separados por comas, que una persona debe confirmar para conceder a tu página web acceso a sus datos. El inicio de sesión con Facebook requiere que los usuarios externos usen el permiso avanzado public_profile.
En este ejemplo, se pide permiso al usuario que inicia sesión para acceder a su perfil público y correo electrónico desde la página web.
FB.login(function(response) { // handle the response }, {scope: 'public_profile,email'});
La respuesta, ya sea conectarse o cancelar la operación, devuelve un objeto authResponse
para la devolución de llamada especificada cuando llamaste a FB.login()
. Esta respuesta se puede detectar y gestionar en la llamada a FB.login()
.
FB.login(function(response) { if (response.status === 'connected') { // Logged into your webpage and Facebook. } else { // The person is not logged into your webpage or we are unable to tell. } });
Para cerrar la sesión de una persona en tu página web, conecta la función FB.logout()
del SDK para JavaScript a un botón o un enlace.
FB.logout(function(response) { // Person is now logged out });
Nota: La llamada a esta función también puede cerrar la sesión de Facebook de esta persona.
Además, el cierre de sesión en tu página web no revoca los permisos que el usuario concedió a tu página web durante el inicio de sesión. La revocación de permisos debe realizarse aparte. Diseña tu página web de modo que el cuadro de diálogo de inicio de sesión no se muestre a los usuarios que cerraron sesión cuando la vuelvan a iniciar.
Este código carga e inicializa el SDK para JavaScript en tu página HTML. Reemplaza {app-id}
por tu identificador de la aplicación y {api-version}
por la versión de la API Graph que quieres utilizar. A no ser que tengas un motivo concreto para usar una versión anterior, especifica la más reciente: v21.0
.
<!DOCTYPE html> <html> <head> <title>Facebook Login JavaScript Example</title> <meta charset="UTF-8"> </head> <body> <script> function statusChangeCallback(response) { // Called with the results from FB.getLoginStatus(). console.log('statusChangeCallback'); console.log(response); // The current login status of the person. if (response.status === 'connected') { // Logged into your webpage and Facebook. testAPI(); } else { // Not logged into your webpage or we are unable to tell. document.getElementById('status').innerHTML = 'Please log ' + 'into this webpage.'; } } function checkLoginState() { // Called when a person is finished with the Login Button. FB.getLoginStatus(function(response) { // See the onlogin handler statusChangeCallback(response); }); } window.fbAsyncInit = function() { FB.init({ appId : '{app-id}', cookie : true, // Enable cookies to allow the server to access the session. xfbml : true, // Parse social plugins on this webpage. version : '{api-version}' // Use this Graph API version for this call. }); FB.getLoginStatus(function(response) { // Called after the JS SDK has been initialized. statusChangeCallback(response); // Returns the login status. }); }; function testAPI() { // Testing Graph API after login. See statusChangeCallback() for when this call is made. console.log('Welcome! Fetching your information.... '); FB.api('/me', function(response) { console.log('Successful login for: ' + response.name); document.getElementById('status').innerHTML = 'Thanks for logging in, ' + response.name + '!'; }); } </script> <!-- The JS SDK Login Button --> <fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> </fb:login-button> <div id="status"> </div> <!-- Load the JS SDK asynchronously --> <script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js"></script> </body> </html>