Facebook возвращает undefined для электронной почты и дня рождения
Я пытаюсь использовать API Facebook, который предоставляет first_name
, last_name
, gender
, email
, birthday
для регистрации на моем веб-сайте. Я использовал API-интерфейс Graph и создал токен доступа с необходимой областью.
Я попробовал на своей личной учетной записи, в которой я создал приложение, и он правильно вернул поля, но для учетной записи пользователя и друга FB он возвращает адрес электронной почты и день рождения как "undefined". В файле graph.facebook.com отображается следующая ошибка для учетной записи друга.
![enter image description here]()
Facebook возвращает идентификатор электронной почты для моего друга, то же самое на doulingo.
Я устанавливаю разрешения неправильно или есть другие проблемы?
Ответы
Ответ 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.
Подробнее см. и .