J'utilise l'API Graph, mais je n'arrive pas à comprendre comment obtenir l'adresse e-mail des utilisateurs connectés.
L'introduction à Graph indique que "L'API Graph peut donner accès à toutes les données d'enregistrement de compte de base que vous demanderiez généralement dans un formulaire d'inscription pour votre site, y compris le nom, l'adresse e-mail, la photo de profil et la date de naissance"
Tout va bien, mais comment puis-je accéder à ces informations?
Voici ce que j'ai jusqu'à présent:
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
var_dump($obj);
sortie?Réponses:
La seule façon d'obtenir l'adresse e-mail des utilisateurs est de demander des autorisations étendues sur le champ e-mail. L'utilisateur doit vous permettre de voir cela et vous ne pouvez pas obtenir les adresses e-mail des amis de l'utilisateur.
http://developers.facebook.com/docs/authentication/permissions
Vous pouvez le faire si vous utilisez Facebook connect en transmettant scope = email dans la chaîne get de votre appel à la boîte de dialogue Auth.
Je recommanderais d'utiliser un SDK au lieu de file_get_contents car cela facilite grandement l' authentification Oauth .
la source
FB.api('/me?scope=email', function(apiResponse) { ... });
// Facebook SDK v5 for PHP // https://developers.facebook.com/docs/php/gettingstarted/5.0.0 $fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.4', ]); $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); $response = $fb->get('/me?locale=en_US&fields=name,email'); $userNode = $response->getGraphUser(); var_dump( $userNode->getField('email'), $userNode['email'] );
la source
/me
itinéraire? Je continue à parcourir les pages sur l' API Graph et je ne le trouve nulle part :(Ouvrez base_facebook.php Ajoutez Access_token à la fonction
getLoginUrl()
array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params);
et utiliser la portée de l'autorisation de messagerie
if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); }
la source
Pour obtenir l'e-mail de l'utilisateur, vous devez vous connecter à l'utilisateur avec son compte Facebook en utilisant l'
email
autorisation. Utilisez pour cela le SDK PHP Facebook ( voir sur github ) comme suit.Vérifiez d'abord si l'utilisateur est déjà connecté:
require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } }
Si ce n'est pas le cas, vous pouvez afficher le lien de connexion demandant l'
email
autorisation:if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; }
Lorsqu'il est connecté, l'e-mail se trouve dans le
$user_profile
tableau.J'espère que ça t'as aidé !
la source
Ajoutez simplement ces blocs de code au retour d'état et commencez à passer un objet de chaîne de requête {}. Pour les développeurs JavaScript
Après avoir initialisé votre sdk.
étape 1: // obtenir le statut de connexion
$(document).ready(function($) { FB.getLoginStatus(function(response) { statusChangeCallback(response); console.log(response); }); });
Cela vérifiera le chargement du document et vérifiera votre statut de connexion si les utilisateurs ont été connectés.
Ensuite, la fonction checkLoginState est appelée et la réponse est transmise à statusChangeCallback
function checkLoginState() { FB.getLoginStatus(function(response) { statusChangeCallback(response); }); }
Étape 2: vous permet d'obtenir les données de réponse de l'état
function statusChangeCallback(response) { // body... if(response.status === 'connected'){ // setElements(true); let userId = response.authResponse.userID; // console.log(userId); console.log('login'); getUserInfo(userId); }else{ // setElements(false); console.log('not logged in !'); } }
Cela a également l' ID utilisateur qui est défini sur variable, puis une fonction getUserInfo est appelée pour récupérer les informations utilisateur à l'aide de Graph-api.
function getUserInfo(userId) { // body... FB.api( '/'+userId+'/?fields=id,name,email', 'GET', {}, function(response) { // Insert your code here // console.log(response); let email = response.email; loginViaEmail(email); } ); }
Après avoir passé l' ID utilisateur comme argument, la fonction récupère toutes les informations relatives à cet ID utilisateur . Remarque: dans mon cas, je cherchais l'e-mail, pour me permettre d'exécuter une fonction qui peut connecter l'utilisateur par e-mail uniquement.
// connexion par e-mail
function loginViaEmail(email) { // body... let token = '{{ csrf_token() }}'; let data = { _token:token, email:email } $.ajax({ url: '/login/via/email', type: 'POST', dataType: 'json', data: data, success: function(data){ console.log(data); if(data.status == 'success'){ window.location.href = '/dashboard'; } if(data.status == 'info'){ window.location.href = '/create-account'; } }, error: function(data){ console.log('Error logging in via email !'); // alert('Fail to send login request !'); } }); }
la source
Vous pouvez récupérer l'adresse e-mail du profil de l'utilisateur connecté. Voici l'extrait de code
<?php $facebook = new Facebook(array( 'appId' => $initMe["appId"], 'secret' => $initMe["appSecret"], )); $facebook->setAccessToken($initMe["accessToken"]); $user = $facebook->getUser(); if ($user) { $user_profile = $facebook->api('/me'); print_r($user_profile["email"]); } ?>
la source
$user_profile
ne contient pas d'emailEn supposant que vous ayez demandé des autorisations de messagerie lorsque l'utilisateur s'est connecté à partir de votre application et que vous disposez d'un jeton valide,
Avec l' api de récupération, vous pouvez simplement
const token = "some_valid_token"; const response = await fetch( `https://graph.facebook.com/me?fields=email&access_token=${token}` ); const result = await response.json();
le résultat sera:
{ "id": "some_id", "email": "[email protected]" }
id sera retourné de toute façon.
Vous pouvez ajouter aux champs le paramètre de requête plus de choses, mais vous avez besoin d'autorisations pour eux s'ils ne sont pas sur le profil public (le nom est public).
https://developers.facebook.com/docs/facebook-login/permissions
la source
https://graph.facebook.com/me
vous donnera des informations sur l'utilisateur actuellement connecté, mais vous devrez fournir un jeton oauth. Voir:
http://developers.facebook.com/docs/reference/api/user
la source
L'e-mail dans le profil peut être obtenu en utilisant une autorisation étendue mais je suppose qu'il n'est pas possible d'obtenir l'e-mail utilisé pour se connecter à fb. Dans mon application, je voulais afficher plusieurs comptes fb d'un utilisateur dans une liste, je voulais afficher les e-mails de connexion des comptes fb comme un identifiant unique des comptes respectifs, mais je ne pouvais pas le retirer de fb, tout ce que j'ai obtenu était l'adresse e-mail principale dans le profil utilisateur, mais dans mon cas, mon adresse e-mail de connexion et mon adresse e-mail principale sont différentes.
la source
Assurez-vous que votre application Facebook est publiée. Afin de recevoir des données pour les e-mails, public_profile et user_friends, votre application doit être rendue publique.
Vous pouvez le désactiver plus tard à des fins de développement et toujours obtenir le champ de courrier électronique.
la source
Les outils suivants peuvent être utiles lors du développement:
https://developers.facebook.com/tools/debug/accesstoken/
https://developers.facebook.com/tools/explorer
la source
Assurez-vous de spécifier complètement le numéro de version de l'API comme quelque chose comme
"v2.11"
et non"2.11"
Je ne suis pas sûr de la valeur par défaut si cela est incorrect, mais j'ai eu des erreurs étranges en essayant de récupérer simplement l'e-mail lorsque j'ai manqué le fichier
v
.la source
Pour moi, le problème avec la collecte des adresses e-mail des utilisateurs côté PHP (méthode getGraphUser ()) était que le comportement par défaut du bouton rendu par facebook (côté WEBSIDE, créé avec xfbml = 1) est d'appeler implicitement FB.login () avec la portée n'inclut PAS "l'email".
Cela signifie que vous DEVEZ:
1) appeler
manifestement, créer votre propre bouton pour démarrer le processus de connexion
OU
2) ajoutez l'attribut scope = "email" au bouton xfbml
pour pouvoir collecter une adresse e-mail côté PHP.
J'espère que cela aide.
la source
Tout d'abord, activez votre application dans le centre de développement Facebook . Les applications en mode développement ne sont pas autorisées à récupérer le champ e-mail.
Si l'utilisateur n'est pas connecté, vous devez vous connecter et spécifier que votre application / site aura besoin du champ e-mail.
FB.login( function(response) { console.log('Welcome!'); }, {scope: 'email'} );
Ensuite, après la connexion, ou si l'utilisateur est déjà connecté, récupérez l'e-mail à l'aide de l'API Facebook, en spécifiant le champ email:
FB.api('/me', {fields: 'name,email'}, (response) => { console.log(response.name + ', ' + response.email); console.log('full response: ', response); });
la source