Question

J'utilise API JavaScript pour créer mon application pour Facebook. Le problème est, il est de retour
email = undefined.

Je ne sais pas pourquoi? Et si j'utiliser le bouton de connexion / déconnexion Facebook sur mon application alors montre d'alerte email id correcte de l'utilisateur, mais je ne veux pas faire cela. Qu'est-ce que je rate?

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>
Était-ce utile?

La solution

Selon les dernières infos sur la page facebook vous devez utiliser « portée » au lieu de perms. https://developers.facebook.com/docs/reference/javascript/FB.login/

Si vous visitez

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

et utiliser le fb-api -> exemple-info utilisateur comme point de départ, puis déconnectez et revenir à nouveau, il devrait vous demander email perms et vous pouvez voir votre e-mail en cours d'impression. Il est fait à l'aide response.email que vous mentionnez dans votre message.

Autres conseils

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

Voici par exemple comment je récupérer le nom d'utilisateur et 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>
<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 cette option pour l'autorisation supplémentaire

pour plus d'informations visitez: https://www.fbrell.com/examples/

In this code i have get user data form facebook and store into my database using 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'});

There are a couple of things wrong with your solution. First of all you are using the old authentication scheme. You should use the new one described here : https://developers.facebook.com/docs/reference/javascript/

You need to add the oauth:true to your init function, and make sure that your getLoginStatus looks for the new type of response.

When that is said you need to make sure you have the right permissions to see the users e-mail. You can see the required permissions here: http://developers.facebook.com/docs/reference/api/user/

You get those by using the FB.login function as described by TommyBs in another answer.

Once you have those options you can use the FB.api function to get the e-mail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top