Pregunta

Estoy usando la API de JavaScript para crear mi aplicación para Facebook. El problema es que está volviendo
email = undefined.

¿No sé por qué? Y si uso el botón de inicio de sesión/cierre de sesión de Facebook en mi aplicación, la alerta muestra la identificación de correo electrónico correcta del usuario, pero no quiero hacerlo. ¿Qué me estoy perdiendo?

Aquí está mi código:

<p><fb:login-button autologoutlink="true" perms="user_about_me,email"></fb:login-button></p>

<script>
window.fbAsyncInit = function () {
  FB.init({ appId: '250180631699888', status: true, cookie: true,
  xfbml: true
});

  FB.getLoginStatus(function (response) {
    if (response.session) {
      greet();
    }
  });
};
(function () {
  var e = document.createElement('script');
  e.type = 'text/javascript';
  e.src = document.location.protocol +
  '//connect.facebook.net/en_US/all.js';
  e.async = true;
  document.getElementById('fb-root').appendChild(e);
} ());

function greet() {
  FB.api('/me', function (response) {
  alert('Welcome, ' + response.name + "!");
  alert('Your email id is : '+ response.email);
});
}
</script>
¿Fue útil?

Solución

De acuerdo con la información más reciente en la página de Facebook, debe usar 'Alcance' en lugar de Perms.https://developers.facebook.com/docs/reference/javascript/fb.login/

Si tú visitas

https://developers.facebook.com/tools/console/

Y use el ejemplo FB-API-> User-Info como punto de partida, luego cierre sesión y vuelva a entrar nuevamente, debería pedirle permanentes de correo electrónico y puede ver que su correo electrónico se imprime. Se realiza utilizando respuesta. Empleado como usted menciona en su publicación.

Otros consejos

// https://developers.facebook.com/docs/javascript/reference/FB.api/
// v2.4

FB.api('/me', { locale: 'en_US', fields: 'name, email' },
  function(response) {
    console.log(response.email);
  }
);

Aquí hay ejemplo de cómo recupero el nombre de usuario y el correo electrónico:

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>

<script>
  $(function() {
    FB.init({
      appId  : 'APP_ID',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });

    FB.getLoginStatus(function(response) {
      if (response.status == 'connected') {
        getCurrentUserInfo(response)
      } else {
        FB.login(function(response) {
          if (response.authResponse){
            getCurrentUserInfo(response)
          } else {
            console.log('Auth cancelled.')
          }
        }, { scope: 'email' });
      }
    });

    function getCurrentUserInfo() {
      FB.api('/me', function(userInfo) {
        console.log(userInfo.name + ': ' + userInfo.email);
      });
    }
  });
</script>
<button id="fb-login">Login & Permissions</button>

<script>
document.getElementById('fb-login').onclick = function() {
  var cb = function(response) {
    Log.info('FB.login callback', response);
    if (response.status === 'connected') {
      Log.info('User logged in');
    } else {
      Log.info('User is logged out');
    }
  };
  FB.login(cb, { scope: 'email' });
};
</script>

Use esto para obtener un permiso adicional

Para más detalles, visite:https://www.fbrell.com/examples/

En este código tengo datos de usuario de usuario Facebook y almacenar en mi base de datos usando AJAX

 FB.login(function(response) {
          if (response.authResponse) {
         FB.api('/me?fields=email,name,first_name,last_name', function(response) 
         {
             FB.api(
             "/"+response.id+"/picture?height=100",
                                    function (responses) {
                                        //console.log(responses.data.url)
                                                    response['profile_pic']=responses.data.url;
                                        $.ajax({
                                                   type:"POST",
                                                   url:'<?php echo base_url(); ?>'+'home/facebook_get_signup',
                                                   data:response,
                                                   success:function(res)
                                                   {
                                                       if(res=='success')
                                                       {

                                                           window.location='<?php echo base_url(); ?>';
                                                       }
                                                       if(res=='exists')
                                                       {
                                                           window.location='<?php echo base_url(); ?>';  
                                                       }
                                                   }
                                               });

                                    }
                                )
         });
        } else {
         console.log('User cancelled login or did not fully authorize.');
        } 
      // handle the response
        }, {scope: 'email,user_likes'});

Hay un par de cosas mal con su solución. En primer lugar, está utilizando el antiguo esquema de autenticación. Debe usar el nuevo descrito aquí:https://developers.facebook.com/docs/reference/javascript/

Debe agregar la OAuth: Fiel a su función init y asegúrese de que su getLoginStatus busque el nuevo tipo de respuesta.

Cuando se dice que debe asegurarse de tener los permisos adecuados para ver el correo electrónico de los usuarios. Puede ver los permisos requeridos aquí:http://developers.facebook.com/docs/reference/api/user/

Los obtienes usando la función FB.login como lo describe Tommybs en otra respuesta.

Una vez que tenga esas opciones, puede usar la función FB.API para obtener el correo electrónico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top