2011-10-19 5 views
29

Estoy usando JavaScript API para crear mi aplicación para Facebook. El problema es que está devolviendo
email = undefined.cómo obtener el ID de correo electrónico del usuario de Facebook usando javascript SDK

No sé por qué? Y si utilizo el botón de inicio/finalización de sesión de Facebook en mi aplicación, la alerta muestra el id. De correo electrónico correcto 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> 

Respuesta

8

De acuerdo con la última información sobre la página de facebook se debe utilizar 'alcance' en lugar de ondulaciones permanentes. https://developers.facebook.com/docs/reference/javascript/FB.login/

Si visita

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

y utiliza el FB-api -> fácil de información ejemplo como punto de partida, a continuación, cierre de sesión y volver de nuevo, se debe pedir permanentes correo electrónico y puede ver que se imprima su correo electrónico. Se hace usando response.email como mencionas en tu publicación.

+0

gracias por su respuesta, tengo una consulta más que la forma de obtener el ID de correo electrónico desde la que el usuario haya iniciado la sesión? hay otros identificadores de correo electrónico también relacionados con un perfil ... – user958414

+0

debe usar su token de acceso a las aplicaciones en lugar de los usuarios y luego usar eso para recuperar la información que necesita – TommyBs

0

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

Debe agregar oauth: verdadero a su función init, y asegúrese de que getLoginStatus busque el nuevo tipo de respuesta.

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

Los obtiene al utilizar la función FB.login descrita por TommyBs en otra respuesta.

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

12

aquí es ejemplo de cómo puedo recuperar el nombre de usuario y dirección de correo:

<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> 
6
<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> 

Utilice esta opción para el permiso adicional

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

+0

*, {scope: 'email'} *, vida salvada Intenté muchas ... solo estas soluciones funcionaron para mí. – Vikrant

82
// 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); 
    } 
); 
+0

esto fue lo que me ayudó – Benjamin

+0

¿por qué los chicos de Fb siguen hurgando ...?!?!?! Tx @masakielastic! Han pasado horas, hasta que encuentre tu respuesta! –

0

En este código tengo los datos de usuario de Facebook y los almaceno en mi base de datos usando ajax g

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'}); 
Cuestiones relacionadas