Domanda

Sto usando l'API grafico, ma non riesco a capire come ottenere un indirizzo e-mail degli utenti accessibile.

L'introduzione al grafico afferma "L'API grafica può fornire l'accesso a tutti i dati di registrazione dell'account di base che in genere richiederesti in un modulo di iscrizione per il tuo sito, inclusi nome, indirizzo e-mail, immagine del profilo e compleanno"

Tutto bene, ma come accedo a queste informazioni?

Questo è quello che ho finora:

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

$first = $json['first_name']; // gets first name
$last = $json['last_name'];
È stato utile?

Soluzione

L'unico modo per ottenere l'indirizzo e-mail degli utenti è richiedere autorizzazioni estese sul campo e-mail. L'utente deve permetterti di vedere questo e non è possibile ottenere gli indirizzi e-mail degli amici dell'utente.

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

Puoi farlo se stai utilizzando Facebook Connect passando Email = Email nella stringa di Get della tua chiamata alla finestra di dialogo Auth.

Consiglierei di usare un SDK invece di file_get_contents in quanto rende molto più facile eseguire il Oauth autenticazione.

Altri suggerimenti

// 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_Facebook.php Aggiungi accesso_token alla funzione getLoginUrl()

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

e utilizzare l'ambito per l'autorizzazione e -mail

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

Per ricevere l'e -mail dell'utente, devi accedere all'utente con il suo account Facebook utilizzando il email autorizzazione. Utilizza per questo Facebook PHP SDK (Vedi su GitHub) come segue.

Prima controlla se l'utente è già effettuato l'accesso:

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 lui non è, puoi visualizzare il link di accesso che chiede il email autorizzazione :

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

Quando viene registrato nell'e -mail è disponibile in $user_profile Vettore.

Spero possa aiutare !

È possibile recuperare l'indirizzo e -mail dal profilo dell'utente accessibile. Ecco lo snippet di codice

<?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 aggiungere questo blocco di codice al ritorno di stato e iniziare a passare un oggetto stringa di query {}. Per gli sviluppatori JavaScript

Dopo aver inizializzato l'SDK.

Passaggio 1: // Ottieni lo stato di accesso

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

Ciò verificherà il caricamento del documento e riceverà il controllo dello stato di accesso se gli utenti hanno effettuato l'accesso.

Quindi la funzione checkloginstate è chiamato e la risposta è passata a StatusChangeCallback

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

Passaggio 2: consentire di ottenere i dati di risposta dallo stato

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

Questo ha anche il ID utente che viene impostato su variabile, quindi a getuserinfo Func è chiamato per recuperare le informazioni dell'utente utilizzando il grafico-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);
      }
    );
  }

Dopo aver superato il ID utente Come argomento, la funzione quindi recupera tutte le informazioni relative a questo ID utente. Nota: nel mio caso stavo cercando l'e -mail, in quanto mi ha permesso di eseguire una funzione in grado di registrare l'utente solo via e -mail.

// Accedi via 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

Ti darà informazioni sull'utente attualmente accessibile, ma dovrai fornire un token OAuth. Vedere:

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

L'e -mail nel profilo può essere ottenuta utilizzando l'autorizzazione estesa, ma immagino che non sia possibile utilizzare l'e -mail per accedere a FB. Nella mia app volevo visualizzare gli account Mulitple FB di un utente in un elenco, volevo mostrare le e -mail di accesso degli account FB come un identificatore univoco dei rispettivi account, ma non sono riuscito a toglierlo da FB, tutto ciò che ho ottenuto è stato L'e -mail principale nel profilo utente ma nel mio caso la mia e -mail di accesso e la mia e -mail principale sono diverse.

Assicurati che la tua applicazione Facebook sia pubblicata. Per ricevere dati per e -mail, public_profile e user_friends, la tua app deve essere resa disponibile al pubblico.

Puoi disabilitarlo in seguito a fini di sviluppo e ottenere comunque un campo e -mail.

I seguenti strumenti possono essere utili durante lo sviluppo:

Access token debugger: incolla in un token di accesso per i dettagli

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

Graph API Explorer: test Richieste all'API grafico dopo aver incollato il token di accesso

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

Assicurati di specificare completamente il numero di versione dell'API come qualcosa di simile "v2.11" e non "2.11"

Non sono sicuro a cosa sia impostata predefinita se questo non è corretto, ma ho avuto alcuni strani errori che hanno cercato di recuperare l'e -mail quando ho perso il v.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top