Facebook oauth получить электронную почту пользователя - PullRequest
38 голосов
/ 18 апреля 2011

Я использую Facebook Javascript SDK для получения oauth-токена и получения всех данных из FB:

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

    });

Я получаю всю основную информацию (полное имя, работа, школа, ID ...), но не EMAIL(response.email == не определено) !!

Я знаю, что можно получить доступ к электронной почте в рамках базовой информации (не запрашивая разрешения «электронной почты»), как мне это сделать?

Ответы [ 4 ]

68 голосов
/ 19 апреля 2011

Вам необходимо получить электронное письмо в явном виде следующим образом:

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

И чтобы получить адрес электронной почты, необходимо разрешение электронной почты.Таким образом, код может выглядеть следующим образом (есть и другие варианты, такие как кнопка «Регистрация», кнопка «Войти») *

            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 */
5 голосов
/ 26 апреля 2016

Сначала сделайте ваше приложение live доступным для всех. Затем вы должны дать разрешение на получение пользовательского «электронного письма», которое не разрешено приложением по умолчанию. После этого метод входа в систему должен быть изменен следующим образом.

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

Если поле id не требуется, измените переменную url на:

var url = '/me?fields=name,email';
1 голос
/ 29 января 2017

Если вы можете изменить цепочку обещаний, это сработало для меня:

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 + "!");
       });
    }
});
0 голосов
/ 19 апреля 2011

Невозможно, пользователь должен предоставить вашему приложению доступ к своей информации электронной почты, или в другом случае он может быть доступен, если пользователь разрешил всем просматривать электронную почту в своих настройках конфиденциальности.

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