Pergunta

Estou usando a API do gráfico, mas não consigo descobrir como obter um endereço de e-mail dos usuários conectados.

A introdução aos estados gráficos "A API do gráfico pode fornecer acesso a todos os dados básicos de registro de 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 essa informação?

É isso que tenho até agora:

$json = $facebook->api('/me');

$first = $json['first_name']; // gets first name
$last = $json['last_name'];
Foi útil?

Solução

A única maneira de obter o endereço de e-mail dos usuários é solicitar permissões estendidas no campo de email. 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 na string get da 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 executar o Oauth autenticação.

Outras dicas

// 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']
);

Open base_face_facebook.php Add 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 use o escopo para permissão de e -mail

if ($user) {
   echo $logoutUrl = $facebook->getLogoutUrl();
} else {
   echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream'));
}

Para obter o e -mail do usuário, você deve fazer login no usuário com sua conta no Facebook usando o email permissão. Use para isso o SDK PHP do Facebook (Veja no Github) como segue.

Primeiro verifique se o usuário já está conectado:

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 estiver, você pode exibir o link de login pedindo o 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 no e -mail, pode ser encontrado no $user_profile variedade.

Espero que ajude !

Você pode recuperar o endereço de e -mail do perfil do usuário logado. Aqui está o trecho 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"]);
    }
?>

Basta adicionar estes blocos de código no retorno do status e começar a passar um objeto de sequência de consulta {}. Para desenvolvedores JavaScript

Depois de inicializar seu SDK.

Etapa 1: // Obtenha 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 foram conectados.

Então a função checkLogInstate é chamado e a resposta é passada para StatusChanGecallback

function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }

Etapa 2: deixe você obter 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 !');
    }
  }

Isso também tem o ID do usuário que está sendo definido como variável, então um getUserinfo O FUNC é chamado para buscar informações do usuário usando o gráfico-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);
      }
    );
  }

Depois de passar o ID do usuário Como argumento, a função busca todas as informações relacionadas a isso ID do usuário. NOTA: No meu caso, eu estava procurando o email, para me permitir executar uma função que pode fazer o usuário registrado apenas por e -mail.

// Login por 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 !');
      }
    });
  }

https://graph.facebook.com/me

fornecerá informações sobre o usuário logado atualmente, mas você precisará fornecer um token OAuth. Ver:

http://developers.facebook.com/docs/reference/api/user

O email no perfil pode ser obtido usando permissão estendida, mas acho que não é possível obter o email usado para fazer o login FB. No meu aplicativo, eu queria exibir contas Mulitple FB de um usuário em uma lista, eu queria mostrar os e -mails de login das contas do FB como um identificador exclusivo das respectivas contas, mas não consegui tirá -lo do FB, tudo o que recebi foi O email principal no perfil do usuário, mas no meu caso, meu email de login e meu e -mail principal são diferentes.

Verifique se o seu aplicativo no Facebook está 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.

As ferramentas a seguir podem ser úteis durante o desenvolvimento:

Acesso Token Debugger: Cole em um token de acesso para obter detalhes

https://developers.facebook.com/tools/debug/accesstoken/

Explorador de API do gráfico: solicitações de teste à API do gráfico após colar seu token de acesso

https://developers.facebook.com/tools/explorer

Especifique completamente o número da versão da API como algo como "v2.11" e não "2.11"

Não tenho certeza do que se destaca se isso estiver incorreto, mas recebi alguns erros estranhos tentando apenas recuperar o e -mail quando perdi o v.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top