Frage

Ich verwende die Graph-API, kann aber nicht herausfinden, wie man eine protokollierte Benutzer-E-Mail-Adresse erhält.

Das Intro-to-Graph-Status "Die Graph-API kann Zugriff auf alle grundlegenden Kontoregistrierungsdaten bieten, die Sie normalerweise in einem Anmeldeformular für Ihre Website anfordern, einschließlich Name, E-Mail-Adresse, Profilbild und Geburtstag."

Alles gut und gut, aber wie greife ich auf diese Informationen zu?

Das habe ich bisher:

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

$first = $json['first_name']; // gets first name
$last = $json['last_name'];
War es hilfreich?

Lösung

Die einzige Möglichkeit, die E-Mail-Adresse der Benutzer zu erhalten, besteht darin, erweiterte Berechtigungen im Feld E-Mail anzufordern. Der Benutzer muss Ihnen erlauben, dies zu sehen, und Sie können die E-Mail-Adressen der Freunde des Benutzers nicht erhalten.

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

Sie können dies tun, wenn Sie Facebook Connect verwenden, indem Sie Scope = E -Mail in der GET -Zeichenfolge Ihres Anrufs an den Auth -Dialog übergeben.

Ich würde empfehlen, eine zu verwenden SDK Anstelle von File_Get_Contents, da es die Ausführung der Ausführung der Ausführung der Ausführung OAuth Authentifizierung.

Andere Tipps

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

Öffnen Sie Base_facebook.php Access_Token bei der Funktion hinzufügen getLoginUrl()

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

und verwenden Sie den Bereich für die E -Mail -Berechtigung

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

Um die Benutzer -E -Mail zu erhalten, müssen Sie sich im Benutzer mit seinem Facebook -Konto mit dem anmelden email Genehmigung. Verwenden Sie dafür das Facebook PHP SDK (Siehe auf Github) wie folgt.

Überprüfen Sie zunächst, ob der Benutzer bereits angemeldet ist:

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;
    }
}

Wenn er nicht ist, können Sie den Login -Link anzeigen und nach dem fragen email Genehmigung :

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

Wenn er in der E -Mail angemeldet ist $user_profile Array.

Ich hoffe, das hilft !

Sie können die E -Mail -Adresse aus dem profile angemeldeten Benutzer abrufen. Hier ist der Code -Snippet

<?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"]);
    }
?>

Fügen Sie diesen Codeblock einfach bei der Statusrückgabe hinzu und übergeben Sie ein Abfragestnungsobjekt {}. Für JavaScript Devs

Nach dem Initialisieren Ihres SDK.

Schritt 1: // Anmeldestatus erhalten

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

Dadurch wird das Laden von Dokumenten überprüft und Ihre Anmeldestatusprüfung abgerufen, wenn Benutzer angemeldet wurden.

Dann die Funktion Checkloginstate wird aufgerufen, und die Antwort ist übergeben auf StatuschangeCallback

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

Schritt 2: Lassen Sie die Antwortdaten aus dem Status abrufen

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

Dies hat auch das Benutzeridentifikation welches auf variabel eingestellt wird, dann a GetUserinfo Func wird aufgerufen, um Benutzerinformationen mit dem Graph-API abzurufen.

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

Nach dem Bestehen der Benutzeridentifikation Als Argument holt die Funktion dann alle Informationen darüber ab Benutzeridentifikation. HINWEIS: In meinem Fall suchte ich nach der E -Mail, um mir eine Funktion ausführen zu können, die nur per E -Mail angemeldet ist.

// Melden Sie sich per E -Mail an

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

Geben Sie Informationen über den aktuell angemeldeten Benutzer, aber Sie müssen ein OAuth-Token liefern. Sehen:

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

Die E -Mail im Profil kann mit der erweiterten Berechtigung erhalten werden, aber ich denke, es ist nicht möglich, die E -Mail zum Login -FB zu erhalten. In meiner App wollte ich mulitple FB -Konten eines Benutzers in einer Liste anzeigen. Ich wollte die Anmelde -E -Mails von FB -Konten als eindeutige Kennung der jeweiligen Konten anzeigen, aber ich konnte es nicht von FB ausziehen, alles was ich bekam, war alles Die primäre E -Mail im Benutzerprofil, aber in meinem Fall sind meine Anmeldem -E -Mail und meine primäre E -Mail unterschiedlich.

Stellen Sie sicher, dass Ihre Facebook -Anwendung veröffentlicht wird. Um Daten für E -Mails zu erhalten, muss Ihre App der Öffentlichkeit zur Verfügung gestellt werden.

Sie können es später für Entwicklungszwecke deaktivieren und dennoch ein E -Mail -Feld erhalten.

Die folgenden Tools können während der Entwicklung nützlich sein:

Zugriff auf Token -Debugger: Einfügen in einem Zugangstoken für Details

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

Graph API Explorer: Testeranfragen an die Graph -API nach dem Einfügen in Ihrem Zugriffstoken

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

Stellen Sie sicher "v2.11" und nicht "2.11"

Ich bin mir nicht sicher, was es standardmäßig ist, wenn dies falsch ist, aber ich habe einige seltsame Fehler bekommen, um die E -Mail einfach abzurufen v.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top