J'utilise JavaScript API pour créer mon application pour Facebook. Le problème est, ça revientemail = undefined
.
Je ne sais pas pourquoi? Et si j'utilise le bouton de connexion/déconnexion Facebook sur mon application, l'alerte indique le bon identifiant de messagerie mais je ne veux pas le faire . Qu'est-ce qui me manque?
Voici mon code:
<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>
Selon les dernières informations sur la page facebook, vous devez utiliser "scope" au lieu de permanentes. https://developers.facebook.com/docs/reference/javascript/FB.login/
Si vous visitez
https://developers.facebook.com/tools/console/
et utilisez l'exemple fb-api -> user-info comme point de départ, puis déconnectez-vous et reconnectez-vous, il devrait vous demander des permanences pour les emails et vous pouvez voir votre email en cours d'impression. C'est fait en utilisant response.email comme vous le mentionnez dans votre message.
// 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);
}
);
voici comment récupérer le nom d'utilisateur et l'adresse e-mail:
<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>
<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>
Utilisez ceci pour une permission supplémentaire
pour plus de détails, visitez: https://www.fbrell.com/examples/
Dans ce code, je reçois le formulaire de données utilisateur facebook et le stocke dans ma base de données en utilisant 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'});
Votre solution présente quelques défauts. Tout d'abord, vous utilisez l'ancien schéma d'authentification. Vous devez utiliser le nouveau décrit ici: https://developers.facebook.com/docs/reference/javascript/
Vous devez ajouter oauth: true à votre fonction init et vous assurer que votre getLoginStatus recherche le nouveau type de réponse.
Lorsque cela est dit, vous devez vous assurer que vous avez les autorisations nécessaires pour voir le courrier électronique des utilisateurs. Vous pouvez voir les autorisations requises ici: http://developers.facebook.com/docs/reference/api/user/
Vous les obtenez en utilisant la fonction FB.login décrite par les TommyB dans une autre réponse.
Une fois que vous avez ces options, vous pouvez utiliser la fonction FB.api pour obtenir le courrier électronique.