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

Facebook возвращает undefined для электронной почты и дня рождения

Я пытаюсь использовать API Facebook, который предоставляет first_name, last_name, gender, email, birthday для регистрации на моем веб-сайте. Я использовал API-интерфейс Graph и создал токен доступа с необходимой областью. Я попробовал на своей личной учетной записи, в которой я создал приложение, и он правильно вернул поля, но для учетной записи пользователя и друга FB он возвращает адрес электронной почты и день рождения как "undefined". В файле graph.facebook.com отображается следующая ошибка для учетной записи друга.

enter image description here

Facebook возвращает идентификатор электронной почты для моего друга, то же самое на doulingo.

Я устанавливаю разрешения неправильно или есть другие проблемы?

4b9b3361

Ответ 1

Проблема с моим кодом была связана с тем, что не использовал access_token. Я использовал access_token для извлечения всех, first_name, last_name, gender, birthday, email.

function authUser() {
            FB.login(checkLoginStatus, {scope:'email, user_likes'});
            function checkLoginStatus(response) {
                if(!response || response.status !== 'connected') {
                    alert('User is not authorized');
                    document.getElementById('loginButton').style.display = 'block';
                } else {
                    alert('User is authorized');
                    document.getElementById('loginButton').style.display = 'none';
                    console.log('Access Token: ' + response.authResponse.accessToken);

                    //This has to be in your callback!
                    var uid = response.authResponse.userID;
                    var accessToken = response.authResponse.accessToken;
                // access token is very important to get some fields like email, birthday

                    getData();
                }
            }
        }


    function getData() {
        console.log('Welcome!  Fetching your information.... ');
        FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.' + response.id);
        });
    };

Ответ 2

проверьте мой ответ здесь, чтобы увидеть, что это хорошо известная проблема, но не ошибка для разработчиков facebook.

Редактирование.. Это то, что они говорят на сайте разработчиков facebook:

"... Документация для поля 'email' объекта 'user' ( https://developers.facebook.com/docs/reference/api/user/) разъясняет ожидаемое поведение здесь:" это поле не будет возвращается, если действительный адрес электронной почты не доступен ".

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

Нет адреса электронной почты на счете; Не подтвержденное письмо адрес на счете; Нет подтвержденного адреса электронной почты на счете; Пользователь ввел контрольная точка безопасности, которая требовала от них подтверждения их электронной почты адрес, и они еще этого не сделали; Адрес электронной почты пользователей: недостижим.

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

Ответ 3

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

Примечание:

  • Для доступа к текущему юбилею пользователя вам необходимо разрешение "user_birthday".
  • Чтобы получить доступ к дням рождения друзей, вам необходимо разрешение "friends_birthday".
  • Вы не можете получить доступ к электронной почте друзей любой ценой.
  • В настройках учетной записи пользователю необходимо установить его адрес электронной почты как "Первичный", чтобы получить доступ, иначе он вернет null.

Подробнее см. и .