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)!!
Я знаю, что можно получить доступ к электронной почте в рамках основной информации (не спрашивая разрешения "электронной почты" ), как мне это сделать?
Ответы
Ответ 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
Невозможно, пользователь должен предоставить вашему приложению доступ к своей электронной почте, или, в другом случае, он может быть доступен, если пользователь разрешит его электронную почту для просмотра всеми в настройках конфиденциальности.