Как получить идентификатор электронной почты пользователя Facebook с помощью javascript sdk
Я использую JavaScript API для создания своего приложения для Facebook. Проблема в том, что она возвращает
email = undefined
.
Я не знаю почему? И если я использую кнопку входа в систему Facebook/выхода из системы в моем приложении, тогда предупреждение показывает правильный идентификатор электронной почты пользователя, но я не хочу этого делать.
Что мне не хватает?
Вот мой код:
<p><fb:login-button autologoutlink="true" perms="user_about_me,email"></fb:login-button></p>
<script>
window.fbAsyncInit = function () {
FB.init({ appId: '250180631699888', status: true, cookie: true,
xfbml: true
});
FB.getLoginStatus(function (response) {
if (response.session) {
greet();
}
});
};
(function () {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
} ());
function greet() {
FB.api('/me', function (response) {
alert('Welcome, ' + response.name + "!");
alert('Your email id is : '+ response.email);
});
}
</script>
Ответы
Ответ 1
Согласно последней информации на странице facebook, вы должны использовать 'scope' вместо perms.
https://developers.facebook.com/docs/reference/javascript/FB.login/
Если вы посетили
https://developers.facebook.com/tools/console/
и используйте пример fb-api → user-info в качестве отправной точки, затем выйдите из системы и снова зайдите в него, он должен запросить у вас переписку по электронной почте, и вы увидите, как печатается ваше электронное письмо. Это делается с помощью response.email, как вы упоминаете в своем сообщении.
Ответ 2
// https://developers.facebook.com/docs/javascript/reference/FB.api/
// v2.4
FB.api('/me', { locale: 'en_US', fields: 'name, email' },
function(response) {
console.log(response.email);
}
);
Ответ 3
Вот пример, как я получаю имя пользователя и адрес электронной почты:
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
$(function() {
FB.init({
appId : 'APP_ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.getLoginStatus(function(response) {
if (response.status == 'connected') {
getCurrentUserInfo(response)
} else {
FB.login(function(response) {
if (response.authResponse){
getCurrentUserInfo(response)
} else {
console.log('Auth cancelled.')
}
}, { scope: 'email' });
}
});
function getCurrentUserInfo() {
FB.api('/me', function(userInfo) {
console.log(userInfo.name + ': ' + userInfo.email);
});
}
});
</script>
Ответ 4
<button id="fb-login">Login & Permissions</button>
<script>
document.getElementById('fb-login').onclick = function() {
var cb = function(response) {
Log.info('FB.login callback', response);
if (response.status === 'connected') {
Log.info('User logged in');
} else {
Log.info('User is logged out');
}
};
FB.login(cb, { scope: 'email' });
};
</script>
Используйте это для дополнительного разрешения
для более подробной информации посетите:
https://www.fbrell.com/examples/
Ответ 5
В вашем решении есть несколько ошибок. Прежде всего, вы используете старую схему аутентификации. Вы должны использовать новый описанный здесь:
https://developers.facebook.com/docs/reference/javascript/
Вам нужно добавить oauth: true для вашей функции init и убедиться, что ваш getLoginStatus ищет новый тип ответа.
Когда это сказано, вам нужно убедиться, что у вас есть права на просмотр электронной почты пользователей. Вы можете увидеть необходимые разрешения здесь:
http://developers.facebook.com/docs/reference/api/user/
Вы получаете их, используя функцию FB.login, как описано TommyBs в другом ответе.
После того, как у вас есть эти параметры, вы можете использовать функцию FB.api для получения электронной почты.
Ответ 6
В этом коде я получаю пользовательскую форму данных facebook и сохраняю в своей базе данных с помощью ajax
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me?fields=email,name,first_name,last_name', function(response)
{
FB.api(
"/"+response.id+"/picture?height=100",
function (responses) {
//console.log(responses.data.url)
response['profile_pic']=responses.data.url;
$.ajax({
type:"POST",
url:'<?php echo base_url(); ?>'+'home/facebook_get_signup',
data:response,
success:function(res)
{
if(res=='success')
{
window.location='<?php echo base_url(); ?>';
}
if(res=='exists')
{
window.location='<?php echo base_url(); ?>';
}
}
});
}
)
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
// handle the response
}, {scope: 'email,user_likes'});