Подтвердить что ты не робот

Facebook oauth получает пользователя по электронной почте

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

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

    });

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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 + "!");
       });
    }
});

Ответ 4

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