Pregunta

Estoy usando la API de gráficos, pero no puedo entender cómo obtener una dirección de correo electrónico de usuarios iniciadas.

La introducción al gráfico establece que "la API de gráficos puede proporcionar acceso a todos los datos básicos de registro de cuentas que normalmente solicitaría en un formulario de registro para su sitio, incluido el nombre, la dirección de correo electrónico, la foto del perfil y el cumpleaños".

Todo bien y bueno, pero ¿cómo accedo a esa información?

Esto es lo que tengo hasta ahora:

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

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

Solución

La única forma de obtener la dirección de correo electrónico de los usuarios es solicitar permisos extendidos en el campo de correo electrónico. El usuario debe permitirle ver esto y no puede obtener las direcciones de correo electrónico de los amigos del usuario.

http://developers.facebook.com/docs/authentication/permissions

Puede hacer esto si está utilizando Facebook Connect pasando Scope = Correo electrónico en la cadena Get de su llamada al cuadro de diálogo Auth.

Recomendaría usar un Sdk en lugar de file_get_contents, ya que hace que sea mucho más fácil realizar el Oauth autenticación.

Otros consejos

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

Abrir base_facebook.php Agregar access_token en la función getLoginUrl()

array_merge(array(
                  'access_token' => $this->getAccessToken(),
                  'client_id' => $this->getAppId(),
                  'redirect_uri' => $currentUrl, // possibly overwritten
                  'state' => $this->state),
             $params);

y use el alcance para el permiso de correo electrónico

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

Para recibir el correo electrónico del usuario, debe iniciar sesión en el usuario con su cuenta de Facebook utilizando el email permiso. Úselo para eso el Facebook PHP SDK (Ver en Github) como siguiendo.

Primero verifique si el usuario ya ha iniciado sesión:

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 él no, puede mostrar el enlace de inicio de sesión pidiendo el email permiso :

if (!$user) {
    $args = array('scope' => 'email');
    echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
} else {
    echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
}

Cuando inicia sesión en el correo electrónico se puede encontrar en el $user_profile formación.

Espero que ayude !

Puede recuperar la dirección de correo electrónico del perfil de usuario registrado. Aquí está el fragmento 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"]);
    }
?>

Simplemente agregue estos bloqueos de código en el retorno de estado y comience a pasar un objeto de cadena de consulta {}. Para los desarrolladores de JavaScript

Después de inicializar su SDK.

Paso 1: // Obtener el estado de inicio de sesión

$(document).ready(function($) {
    FB.getLoginStatus(function(response) {
        statusChangeCallback(response);
        console.log(response);
    });
  });

Esto verificará la carga del documento y obtendrá su estado de inicio de sesión, verifique si los usuarios han sido iniciados.

Entonces la función checkloginstate se llama y la respuesta se pasa a statuschangecallback

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

Paso 2: le permita obtener los datos de respuesta del estado

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

Esto también tiene el ID de usuario que se está estableciendo en variable, entonces un getUserInfo FUNC está llamado a obtener información del usuario utilizando el gráfico de 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);
      }
    );
  }

Después de pasar el ID de usuario Como argumento, la función luego obtiene toda la información relacionada con esa ID de usuario. Nota: En mi caso, estaba buscando el correo electrónico, ya que me permitió ejecutar una función que puede registrar el usuario solo por correo electrónico.

// Iniciar sesión por correo electrónico

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

Le dará información sobre el usuario iniciado actualmente, pero deberá proporcionar un token OAuth. Ver:

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

El correo electrónico en el perfil se puede obtener utilizando el permiso extendido, pero supongo que no es posible obtener el correo electrónico utilizado para iniciar sesión FB. En mi aplicación quería mostrar cuentas de Mulitple FB de un usuario en una lista, quería mostrar los correos electrónicos de inicio de sesión de las cuentas de FB como un identificador único de las cuentas respectivas, pero no pude sacarlo de FB, todo lo que obtuve fue El correo electrónico principal en el perfil de usuario, pero en mi caso mi correo electrónico de inicio de sesión y mi correo electrónico principal son diferentes.

Asegúrese de que se publique su aplicación de Facebook. Para recibir datos por correo electrónico, public_profile y user_friends, su aplicación debe estar disponible para público.

Puede deshabilitarlo más tarde con fines de desarrollo y aún así obtener un campo de correo electrónico.

Las siguientes herramientas pueden ser útiles durante el desarrollo:

Access Token Depugger: Peque en un token de acceso para más detalles

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

Graph API Explorer: pruebe las solicitudes de la API de gráficos después de pegar en su token de acceso

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

Asegúrese de especificar completamente el número de versión de la API como algo así como "v2.11" y no "2.11"

No estoy seguro de lo que está por defecto si esto es incorrecto, pero obtuve algunos errores extraños tratando de recuperar el correo electrónico cuando me perdí el v.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top