entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Obtener E-Mail Response Facebook API

Hola muy buen dia, el dia de hoy vengo a hacer una consulta que me esta dando vueltas el caso es que estoy haciendo una web con login mediante facebook pero no logro conseguir el email de esta ya busque en el response y solo me trae el nombre del usuario y su id ¿Alguien ah realizado dicha labor? de ante mano gracias mi codigo s el siguiente

<!DOCTYPE html>
    <head>
        <title>Ejemplo FB</title>
        <script>
            (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 = "http://connect.facebook.net/en_US/sdk.js";
                fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));

            window.fbAsyncInit = function() {
                FB.init({
                    appId : 'XXXXXXXXXXXXXXX',
                    cookie : true,
                    xfbml : true,
                    version : 'v2.0'
                });
            }

            function ingresar() {
                FB.login(function(response){
                    validarUsuario();
                }, {scope: 'public_profile,email'});
                FB.api('/me', function(response) {
    console.log(JSON.stringify(response));
});

            }
            function validarUsuario() {
                FB.getLoginStatus(function(response) {
                    if(response.status == 'connected') {
                        FB.api('/me', function(response) {
                            alert('Hola ' + response.name + ' ' +response.email);
                        });
                    } else if(response.status == 'not_authorized') {
                        alert('Debes autorizar la app!');
                    } else {
                        alert('Debes ingresar a tu cuenta de Facebook!');
                    }
                });

           }

        </script>
    </head>
    <body>
        <fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> </fb:login-button>
        <button onclick="ingresar();">Ingresar con Facebook</button>
    </body>
</html>

1 Respuesta

3votos

fmagrosoto Puntos500

Hola, que tal.

Ahora mismo estoy trabajando en un APP donde solicito los mismos datos. Y lo he conseguido de esta manera.

Primero, identifico si estás conectado a mi APP de esta forma:

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // Acción que se desencadena cuando el usuario está conectado
    // a Facebook y a nuestra APP
    datPer(); // Extraer los datos

    } else if (response.status === 'not_authorized') {
      // Acción que se desencadena cuando el usuario está conectado
      // a Facebook pero NO a nuestra APP
      btnInicioApp(); // Botón para iniciar sesión en el APP

    } else {
      // Acción que se desencadena cuando el usuario no está
      // conectado a Facebook y sepa Dios si a nuestra App
      btnInicioSesion(); // Botón para iniciar sesión en FB
    }
});

Esta función hay que agregarla dentro del bloque:

window.fbAsyncInit = function()...

Luego, cuando la sesión ha sido iniciada, tanto en Facebook como en mi App, llamo a la función que se encarga de extraer los datos:

function datPer(){

  FB.api(
    '/me',
    'GET',
      {"fields":"email,first_name,last_name,id,gender"},
      function(response) {
        usrNombre = response.first_name;
        usrApellidos = response.last_name;
        usrCorreo = response.email;
        usrID = response.id;
        usrSexo = response.gender;
    }
  );

}

Evidentemente, en el inicio de Javascript creé las variables de usrNombre
y demás para que fueran variables globales y poder usarlas cuando yo quiera.

También puedes usar un bloque de FB.Event.subscribe para que Facebook identifique cuando cambia un estado de conexión, como si fuera un eventListener. Cabe señalar que mi APP la hice en forma de SPA (Single Page App), entonces necesito FB.Event.subscribe para saber si un usuario se desconectó o se conectó a mi APP.

Sin embargo... lo que creo que te está pasando es que tu APP NO tiene los permisos necesarios para extraer el email.

Dentro del Api Graph de Facebook debes de seleccionar el permiso para que el usuario - al conectarse con tu APP - permita que Facebook extraiga esta información. Email no es un dato que esté dentro del public_profile de Facebook, así que tienes que solicitar este permiso adicional.

Esta es una liga donde puedes ir al Api Graph - usando tu cuenta y tu App de Facebook - para que puedas configurar los permisos.

Esta otra liga es para mostrarte una captura de pantalla del lugar donde debes de seleccionar este permiso.

Ojalá te haya ayudado.

Saludos

0voto

AdanCervera comentado

Muchas gracias, funciono a la perfección al hacerle unos ajustes basandome en lo que me posteas, muchas gracias de ante mano

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta