web-dev-qa-db-fra.com

comment obtenir l'identifiant email de l'utilisateur Facebook en utilisant javascript sdk

J'utilise JavaScript API pour créer mon application pour Facebook. Le problème est, ça revient
email = undefined

Je ne sais pas pourquoi? Et si j'utilise le bouton de connexion/déconnexion Facebook sur mon application, l'alerte indique le bon identifiant de messagerie mais je ne veux pas le faire . Qu'est-ce qui me manque? 

Voici mon code: 

<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>
31
user958414

Selon les dernières informations sur la page facebook, vous devez utiliser "scope" au lieu de permanentes. https://developers.facebook.com/docs/reference/javascript/FB.login/

Si vous visitez 

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

et utilisez l'exemple fb-api -> user-info comme point de départ, puis déconnectez-vous et reconnectez-vous, il devrait vous demander des permanences pour les emails et vous pouvez voir votre email en cours d'impression. C'est fait en utilisant response.email comme vous le mentionnez dans votre message.

9
TommyBs
// 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);
  }
);
93
masakielastic

voici comment récupérer le nom d'utilisateur et l'adresse e-mail:

<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>
13
Mantas Vaitkūnas
<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>

Utilisez ceci pour une permission supplémentaire 

pour plus de détails, visitez: https://www.fbrell.com/examples/

8
Ram Balwad

Dans ce code, je reçois le formulaire de données utilisateur facebook et le stocke dans ma base de données en utilisant 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'});
1
Dipak Kolhe

Votre solution présente quelques défauts. Tout d'abord, vous utilisez l'ancien schéma d'authentification. Vous devez utiliser le nouveau décrit ici: https://developers.facebook.com/docs/reference/javascript/

Vous devez ajouter oauth: true à votre fonction init et vous assurer que votre getLoginStatus recherche le nouveau type de réponse.

Lorsque cela est dit, vous devez vous assurer que vous avez les autorisations nécessaires pour voir le courrier électronique des utilisateurs. Vous pouvez voir les autorisations requises ici: http://developers.facebook.com/docs/reference/api/user/

Vous les obtenez en utilisant la fonction FB.login décrite par les TommyB dans une autre réponse. 

Une fois que vous avez ces options, vous pouvez utiliser la fonction FB.api pour obtenir le courrier électronique.

0
Kasper Vesth