web-dev-qa-db-fra.com

L'API Facebook Graph ne renverra pas d'adresse e-mail

Modifier: Pas de doublon, car:

  • J'ai la permission
  • Débogage du jeton
  • Le code fonctionne avec l'utilisateur de test

Veuillez ne pas marquer comme doublon sans lire.

J'essaie d'obtenir l'adresse e-mail de l'utilisateur, mais je ne l'ai pas. Sur l'explorateur d'api du graphique, lorsque j'appuie sur envoyer, le champ de l'e-mail devient grisé et indique que:

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

Mais lorsque je débogue le jeton, il dispose d'une autorisation de messagerie é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 l'e-mail, 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 e-mail afin que personne ne puisse l'avoir? Même lorsque j'accorde la permission?

57
joao Beno

Après avoir marqué mon rapport de bogue comme doublon et avoir lu tous les messages et les liens là-bas, j'ai compris ce qui m'a causé ce problème et comment le résoudre.

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

Solution L'utilisateur concerné doit supprimer l'e-mail, enregistrer les paramètres, puis rajouter l'adresse, confirmer à nouveau, puis la rendre principale. Cela a corrigé mon compte à la fois sur mon application sandbox et sur d'autres applications où la connexion Facebook ne fonctionnait pas.

20
joao Beno

Le Marcus réponse me mène au vrai problème auquel j'étais confronté.

Débogage avec l'outil Facebook Explorer J'ai pu comprendre que je devrais définir la portée de l'e-mail à 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'});

Ce n'est pas tout à fait clair dans le guide Quickstart et j'espère que cela aide aussi quelqu'un d'autre.

38
Miere

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

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

32
ozba

Le nouveau graphique facebook nécessite des étendues ajoutées dans la demande/me comme suit:

/ me? fields = email, anniversaire, lieu, paramètres régionaux, tranche d'âge, devise, prénom, nom de famille, format_nom, sexe et jeton d'accès =

6
Alin Razvan

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 du courrier électronique (je l'ai testé sur mon propre compte et il donnait mon courrier électronique). Puis soudain, il a commencé à ne refléter aucun e-mail. Après deux heures de navigation, je me suis rendu compte qu'il y avait un problème avec le jeton d'accès comme lorsque je suis allé 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 en cela, choisissez "e-mail" et soumettez. Maintenant, testez à nouveau votre requête. Cela fonctionnera certainement, sur la console ainsi que sur votre site Web. À votre santé! :)

4
Sayed

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

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

1
spence0021