Estou usando a API Graph, mas não consigo descobrir como obter o endereço de e-mail de um usuário conectado.
A introdução do Graph afirma "A API Graph pode fornecer acesso a todos os dados básicos de registro da conta que você normalmente solicitaria em um formulário de inscrição para o seu site, incluindo nome, endereço de e-mail, foto do perfil e aniversário"
Tudo bem, mas como faço para acessar essas informações?
Isso é o que eu tenho até agora:
$json = $facebook->api('/me');
$first = $json['first_name']; // gets first name
$last = $json['last_name'];
php
json
facebook
facebook-graph-api
Kylex
fonte
fonte
var_dump($obj);
?Respostas:
A única maneira de obter o endereço de e-mail dos usuários é solicitar permissões estendidas no campo de e-mail. O usuário deve permitir que você veja isso e você não pode obter os endereços de e-mail dos amigos do usuário.
http://developers.facebook.com/docs/authentication/permissions
Você pode fazer isso se estiver usando o Facebook Connect passando scope = email no get string de sua chamada para a caixa de diálogo Auth.
Eu recomendo usar um SDK em vez de file_get_contents, pois torna muito mais fácil realizar a autenticação Oauth .
fonte
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'] );
fonte
/me
rota?Abra base_facebook.php Adicionar Access_token na função
getLoginUrl()
array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params);
e escopo de uso para permissão de e-mail
if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); }
fonte
Para obter o e-mail do usuário, você deve fazer o login do usuário com sua conta do Facebook usando a
email
permissão. Use para isso o Facebook PHP SDK ( veja no github ) como segue.Primeiro verifique se o usuário já está logado:
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; } }
Se ele não for, você pode exibir o link de login solicitando a
email
permissão:if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; }
Quando ele está logado o email pode ser encontrado no
$user_profile
array.Espero que ajude !
fonte
Basta adicionar esses blocos de código no retorno do status e começar a passar um objeto de string de consulta {}. Para desenvolvedores JavaScript
Depois de inicializar o seu SDK.
passo 1: // obter status de login
$(document).ready(function($) { FB.getLoginStatus(function(response) { statusChangeCallback(response); console.log(response); }); });
Isso verificará o carregamento do documento e obterá sua verificação de status de login se os usuários estiveram logados.
Em seguida, a função checkLoginState é chamada e a resposta é passada para statusChangeCallback
function checkLoginState() { FB.getLoginStatus(function(response) { statusChangeCallback(response); }); }
Etapa 2: permite que você obtenha os dados de resposta do status
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 !'); } }
Ele também possui o ID do usuário que está sendo definido como variável, então uma função getUserInfo é chamada para buscar informações do usuário usando a API Graph.
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); } ); }
Depois de passar o ID do usuário como um argumento, a função busca todas as informações relacionadas a esse ID do usuário . Obs: no meu caso estava procurando o e-mail, pois me permitiu executar uma função que pode logar o usuário somente por e-mail.
// login via email
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 !'); } }); }
fonte
Você pode recuperar o endereço de e-mail do perfil do usuário conectado. Aqui está o snippet de código
<?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"]); } ?>
fonte
$user_profile
não contém eSupondo que você solicitou permissões de e-mail quando o usuário fez login em seu aplicativo e você tem um token válido,
Com a API de busca, você pode apenas
const token = "some_valid_token"; const response = await fetch( `https://graph.facebook.com/me?fields=email&access_token=${token}` ); const result = await response.json();
o resultado será:
{ "id": "some_id", "email": "[email protected]" }
id será retornado de qualquer maneira.
Você pode adicionar ao parâmetro de consulta de campos mais coisas, mas você precisa de permissões para eles se eles não estiverem no perfil público (o nome é público).
https://developers.facebook.com/docs/facebook-login/permissions
fonte
https://graph.facebook.com/me
fornecerá informações sobre o usuário conectado no momento, mas você precisará fornecer um token oauth. Vejo:
http://developers.facebook.com/docs/reference/api/user
fonte
O e-mail no perfil pode ser obtido usando permissão estendida, mas acho que não é possível obter o e-mail usado para fazer login no fb. No meu aplicativo, eu queria exibir várias contas do fb de um usuário em uma lista, queria mostrar os e-mails de login das contas do fb como um identificador único das respectivas contas, mas não consegui retirá-lo do fb, tudo o que consegui foi o e-mail principal no perfil do usuário, mas no meu caso meu e-mail de login e meu e-mail principal são diferentes.
fonte
Certifique-se de que seu aplicativo do Facebook seja publicado. Para receber dados por e-mail, public_profile e user_friends, seu aplicativo deve ser disponibilizado ao público.
Você pode desativá-lo mais tarde para fins de desenvolvimento e ainda obter o campo de e-mail.
fonte
As seguintes ferramentas podem ser úteis durante o desenvolvimento:
https://developers.facebook.com/tools/debug/accesstoken/
https://developers.facebook.com/tools/explorer
fonte
Certifique-se de especificar totalmente o número da versão da API como algo semelhante
"v2.11"
e não"2.11"
Não tenho certeza de qual é o padrão se estiver incorreto, mas recebi alguns erros estranhos ao tentar recuperar o e-mail quando perdi o
v
.fonte
Para mim, o problema com a coleta de endereços de e-mail do usuário no lado do PHP (método getGraphUser ()) era que o comportamento padrão do botão renderizado no Facebook (no lado do WEBSIDE, criado com xfbml = 1) é chamar implicitamente FB.login () com o escopo NÃO inclui "e-mail".
Isso significa que você DEVE:
1) ligar
manifestamente, criando seu próprio botão para iniciar o processo de login
OU
2) adicione o atributo scope = "email" ao botão xfbml
para ser capaz de coletar endereços de e-mail no lado do PHP.
Espero que ajude.
fonte
Primeiro, ative seu aplicativo no centro de desenvolvedores do Facebook . Aplicativos em modo de desenvolvimento não têm permissão para recuperar o campo de e-mail.
Se o usuário não estiver logado, você precisa fazer o login e especificar que seu aplicativo / site precisará do campo de e-mail.
FB.login( function(response) { console.log('Welcome!'); }, {scope: 'email'} );
Então, após o login, ou se o usuário já estiver logado, recupere o e-mail utilizando a API do Facebook, especificando o campo email:
FB.api('/me', {fields: 'name,email'}, (response) => { console.log(response.name + ', ' + response.email); console.log('full response: ', response); });
fonte