Facebook Graph API ne renverra pas l'adresse électronique

Modifier: Non en double, car:

  • J'ai la permission
  • Débogé le jeton
  • Code fonctionne avec l'utilisateur de test

Ne pas marquer comme duplicata sans lire.

J'essaie d'obtenir l'adresse e-mail de l'utilisateur, mais je ne l'ai pas compris. Sur le graphique api explorer, lorsque je clique sur envoyer, le champ de messagerie devient grisé et dit que:

Le champ est vide ou interdit par un jeton d'accès

Mais lorsque je débogue le jeton, il est autorisé par courrier électronique

Mon profil a une adresse e-mail.

Mise à jour: J'ai essayé https://developers.facebook.com/tools/console/ . Mon profil ne renvoie rien, même sur un autre ordinateur. Mais le même code renvoie le courrier électronique, le nom et l'uid d'un autre compte.

Code:

<fb:login-button scope="email"> Grant Permissions to make more examples work </fb:login-button> <button onclick="doPost()">Post to Stream</button> <script> function userData() { FB.api('/me?fields=name,email', Log.info.bind('/me callback')); }; FB.getLoginStatus(function(response) { if (response.status === 'connected') { userData(); } }); </script> 

Il est possible de verrouiller votre courrier électronique afin que personne ne puisse l'avoir? Même lorsque j'autorise la permission?

J'ai eu le même problème et je pense que j'ai découvert pourquoi: si l'utilisateur a un courrier électronique non confirmé dans Facebook (c'est-à-dire que Facebook lui a envoyé un courrier de validation à son adresse e-mail mais il n'a pas répondu) Facebook NE PAS passer ce courrier électronique à votre application Même s'il vous a donné les autorisations d'email (!!!).

Donc, ce que j'ai fait, c'est utiliser son email Facebook s'il a un nom d'utilisateur (c.-à-d. [email protected]).

La réponse de Marcus m'amène au vrai problème auquel je suis confronté.

Débogage avec l'outil Explorateur de Facebook, j'ai pu constater que je devais définir la portée du courrier électronique à la méthode FB.login() .

 FB.login(function(response) { if (response.status === 'connected'){ FB.api('/me?fields=id,email,name', function(data) { console.log( data.email ) // it will not be null ;) }) }, {scope: 'email'}); 

Il n'est pas tout à fait clair dans le guide de démarrage rapide et j'espère qu'il aide quelqu'un d'autre aussi.

Après avoir reçu mon rapport de bogue marqué comme dupliqué, et j'ai lu tous les messages et liens là-bas, j'ai eu ce qui m'a causé ce problème et comment réparer.

Le problème Facebook semble oublier parfois ce que votre e-mail principal est sur l'API du graphique (mais il est toujours là dans les préférences).

Solution L'utilisateur affecté doit supprimer le courrier électronique, enregistrer les paramètres, puis ré-ajouter l'adresse, confirmer, puis le rendre principal. Cela a réparé mon compte à la fois sur mon application de boîte de sable et d'autres applications où l'ouverture de session Facebook ne fonctionnait pas.

J'ai eu le même problème pendant que je développais le bouton de connexion fb pour mon site. J'avais même des autorisations de configuration pour mon application ici:

 https://developers.facebook.com/apps/<my-app-ID>/permissions 

Et cela fonctionnait bien pour certains cas initiaux, c'est-à-dire qu'il donnait un courrier électronique (je l'ai testé sur mon propre compte et il a donné mon courrier électronique). Ensuite, tout à coup, il a commencé à refléter aucun e-mail du tout. Après deux heures de navigation, j'ai compris qu'il y avait un problème avec le jeton d'accès lorsque j'étais sur ce lien:

 https://developers.facebook.com/tools/explorer/<your-fb-id>/?method=GET&path=100002451127858%3Ffields%3Did%2Cemail 

Mettez à jour votre-fb-id avec votre identifiant et accédez au lien ci-dessus. Cliquez sur «Obtenir un jeton d'accès». Dans l'onglet qui s'ouvre, cliquez sur «Autorisations étendues» et choisissez «email» et soumettez-le. Maintenant, testez votre requête à nouveau. Il fonctionnera certainement, sur la console ainsi que sur votre site. À votre santé! 🙂

Le nouveau graphique Facebook nécessite des étendues ajoutées dans la requête / me comme suit:

/ Moi? Champs = email, anniversaire, emplacement, localisation, age_range, devise, first_name, last_name, name_format, gender & access_token =

C'est un bug connu. Si l'utilisateur n'a aucune adresse e-mail définie sur primaire, la requête renverra nulle pour le courrier électronique. Définissez l'adresse e-mail de votre compte dans la https://www.facebook.com/settings?tab=account&section=email&view principale, puis essayez.

Source: https://developers.facebook.com/bugs/298946933534016/