2011-04-18 27 views
31

estoy usando Facebook Javascript SDK para obtener oauth token y recuperar todos los datos de FB:Facebook oauth recuperar correo electrónico de usuario

function login() { 
    FB.api('/me', function (response) {    
     alert('You have successfully logged in, ' + response.name + ", " + response.email + "!"); 

    }); 

puedo recuperar toda la información básica (nombre completo, el trabajo, la escuela, ID ..) pero no EMAIL (response.email == undefined) !!

Sé que es posible acceder al correo electrónico dentro de la información básica (no solicitando permisos de 'correo electrónico'), ¿cómo puedo hacer eso?

Respuesta

60

Usted necesita obtener el correo electrónico de forma explícita de la siguiente manera:

    var url = '/me?fields=name,email'; 
        FB.api(url, function (response) { 
         alert(response.name); 
         alert(response.email); 
        }); 

Y para obtener la dirección de correo electrónico, se necesita el permiso de correo electrónico. Así que el código podría ser similar (hay otras opciones como el Registro botón, botón de inicio de sesión ..)

  FB.login(function (response) { 
       if (response.session) { 
        var url = '/me?fields=name,email'; 
        FB.api(url, function (response) { 
         alert(response.name); 
         alert(response.email); 
        }); 
       } 
       else { 
        alert("User did not login successfully"); 
       } 
      }, { scope: 'email' }); /* perms changed to scope */ 
-3

Es imposible, el usuario debe otorgarle a su aplicación acceso a su información de correo electrónico, o en otro caso, puede ser accesible si el usuario permite que su correo electrónico sea visto por todos en su configuración de privacidad.

+0

Tengo la misma situación. No puedo iniciar sesión con fb oauth, cuando se necesita correo electrónico, con mi cuenta porque no permito que mi correo electrónico sea público visible –

3

En primer lugar hacer su aplicación vivo, a disposición del público. Luego debe otorgar permiso para obtener el 'correo electrónico' del usuario, que la aplicación no permite. Después de eso, el método de inicio de sesión debe cambiarse de la siguiente manera.

function checkLoginState() { 
    FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
     console.log('Welcome! Fetching your information.... '); 
     var url = '/me?fields=id,name,email'; 
     FB.api(url, function(response) { 
      alert(response.name + " " + response.id + " " +response.email); 
     }, {scope: 'email'}); 
    }); 
} 

Si el campo Identificación no es necesario cambiar la variable url como:

var url = '/me?fields=name,email'; 
1

Si se puede cambiar para utilizar un encadenamiento promesa, esto funcionó para mí:

fb.login({scope:'email'}).then(function (resp) { 
    if (resp.status === 'connected') { 
     fb.api('/me', 'get', {fields:'id,email,first_name,gender,...'}).then(function (response) { 
      alert('You have successfully logged in, ' + response.name + ", " + response.email + "!"); 
     }); 
    } 
}); 
Cuestiones relacionadas