home - cómo obtener la identificación de correo electrónico del usuario de Facebook usando javascript SDK
home facebook developers (6)
De acuerdo con la última información en la página de Facebook, debe usar ''alcance'' en lugar de permanentes. https://developers.facebook.com/docs/reference/javascript/FB.login/
Si tú visitas
https://developers.facebook.com/tools/console/
y utilice el ejemplo fb-api -> user-info como punto de partida, luego cierre la sesión y vuelva a iniciarla, le pedirá que confirme su correo electrónico y podrá ver cómo se imprime su correo electrónico. Se hace usando response.email como mencionas en tu publicación.
Estoy usando JavaScript API para crear mi aplicación para Facebook. El problema es que está volviendo
email = undefined
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>
En este código, obtengo los datos de usuario de Facebook y los almaceno 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. Debería usar el nuevo descrito 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 diga, debe asegurarse de tener los permisos adecuados para ver el correo electrónico de los usuarios. Puede ver los permisos necesarios aquí: http://developers.facebook.com/docs/reference/api/user/
Obtendrá esos mediante el uso de la función FB.login según lo descrito por TommyBs en otra respuesta.
Una vez que tenga esas opciones, puede usar la función FB.api para recibir el correo electrónico.
aquí está el 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/
// 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);
}
);