Как получить идентификатор электронной почты пользователя Facebook, используя JavaScript SDK - PullRequest
32 голосов
/ 19 октября 2011

Я использую JavaScript API для создания своего приложения для Facebook.Проблема в том, что он возвращает
email = undefined.

Не знаю почему?И если я использую кнопку входа / выхода из Facebook в своем приложении, тогда в предупреждении отображается правильный идентификатор электронной почты пользователя, но я не хочу этого делать.Что мне не хватает?

Вот мой код:

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

Ответы [ 6 ]

95 голосов
/ 01 августа 2015
// 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);
  }
);
13 голосов
/ 19 октября 2011

Вот пример, как я могу получить имя пользователя и адрес электронной почты:

<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>
9 голосов
/ 19 октября 2011

Согласно последней информации на странице в Facebook, вы должны использовать «область» вместо перми.https://developers.facebook.com/docs/reference/javascript/FB.login/

Если вы посетите

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

и используете пример fb-api -> user-info в качестве отправной точки, затем выйдите из системы и снова войдите в систему, он должен попросить у вас разрешение на электронную почту, и вы можете увидеть, что ваша электронная почта печатается.Это делается с помощью response.email, как вы упоминаете в своем сообщении.

8 голосов
/ 23 августа 2013
<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>

Используйте это для дополнительного разрешения

для более подробной информации посетите: https://www.fbrell.com/examples/

1 голос
/ 19 декабря 2017

В этом коде я получил пользовательские данные из Facebook и сохранил в своей базе данных, используя 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'});
0 голосов
/ 19 октября 2011

В вашем решении есть пара ошибок.Прежде всего вы используете старую схему аутентификации.Вы должны использовать новый, описанный здесь: https://developers.facebook.com/docs/reference/javascript/

Вам необходимо добавить oauth: true в вашу функцию init и убедиться, что ваш getLoginStatus ищет новый тип ответа.

Когда это сказано, вы должны убедиться, что у вас есть необходимые разрешения для просмотра электронной почты пользователей.Вы можете увидеть необходимые разрешения здесь: http://developers.facebook.com/docs/reference/api/user/

Вы получаете их, используя функцию FB.login, как описано TommyBs в другом ответе.

Если у вас есть эти опции, вы можете использовать функцию FB.api для получения электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...