Я пытаюсь получить электронную почту пользователя после того, как они нажимают "Продолжить" на Facebook на моем сайте. Я смотрел Stackoverflow и через документацию разработчика для разработчиков Facebook и не вижу причины, почему то, что я пытаюсь, не работает.
JAVASCRIPT
window.fbAsyncInit = function() {
FB.init({
appId : '1882306058687148',
cookie : true,
xfbml : true,
version : 'v2.8'
});
FB.AppEvents.logPageView();
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function checkLoginState() {
FB.getLoginStatus(function(response) {
console.log(response);
statusChangeCallback(response)
});
}
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
if (response.status === 'connected') {
runAPI();
}
}
function runAPI() {
FB.api('/me', { locale: 'en_US', fields: 'name, email' }, function(response) {
console.log(response);
document.getElementById('name').value = response.name;
document.getElementById('email').value = response.email;
document.getElementById('fb-login').style.display = 'none'
});
}
** HTML **
<fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
</fb:login-button>
Что толку меня больше всего, однако, что это тянет имя через и что, безусловно, работает.
Вы получите адрес электронной почты только в том случае, если пользователь имеет подтвержденный набор в своем профиле.
И даже тогда, по-видимому, есть некоторые крайние случаи, когда параметры конфиденциальности все еще могут заставить его не возвращать его вообще. Конечно, у них может не быть одного набора, если они регистрируются только с помощью своего мобильного телефона. Если вам нужны приложения и адрес электронной почты, вы должны выполнить дополнительный шаг для ввода пользователем одного вручную. (В этом случае проверка также является вашей ответственностью.)