2016-04-19 10 views
1

Dieses ist der Code, den ich habe. Ich versuche, die Benutzer-E-Mail zu erhalten, aber ich kann nicht. Gestern habe ich die E-Mail richtig gelesen, aber ich habe die Datei versehentlich gelöscht. Was vermisse ich jetzt?Erhalten Sie email mit facebook SDK 4.0

In login_fb.php Ich rufe die E-Mail wie folgt aus: echo $_SESSION['email'];

session_start(); 
//added in v4.0.0 
require_once 'autoload.php'; 
use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
use Facebook\FacebookRequest; 
use Facebook\FacebookResponse; 
use Facebook\FacebookSDKException; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookAuthorizationException; 
use Facebook\GraphObject; 
use Facebook\Entities\AccessToken; 
use Facebook\HttpClients\FacebookCurlHttpClient; 
use Facebook\HttpClients\FacebookHttpable; 

//init app with app id and secret 
FacebookSession::setDefaultApplication('',''); 
//login helper with redirect_uri 
$helper = new FacebookRedirectLoginHelper('http://www.myurl/facebook/fbconfig.php'); 

try { 
    $session = $helper->getSessionFromRedirect(); 
} catch(FacebookRequestException $ex) { 
    //when facebook returns an error 
} catch(Exception $ex) { 
    //when validation fails or other local issues 
} 

if (isset($session)) { 

    $request = new FacebookRequest($session, 'GET', '/me?locale=en_US&fields=name,first_name,last_name,email,gender'); 
    $loginUrl = $helper->getLoginUrl(array(
     'scope' => 'email' 
    )); 

    $response = $request->execute(); 

    //response 
    $graphObject = $response->getGraphObject(); 
    $fbid   = $graphObject->getProperty('id');   // Facebook ID 
    $full_name  = $graphObject->getProperty('name');  // Facebook full name 
    $first_name  = $graphObject->getProperty('first_name'); // Facebook first name 
    $last_name  = $graphObject->getProperty('last_name'); // Facebook last name 
    $email   = $graphObject->getProperty('email');  // Facebook email 
    $birthday  = $graphObject->getProperty('birthday'); // Facebook birthday 
    $gender   = $graphObject->getProperty('gender');  // Facebook gender 

    /* ---- session variables -----*/ 
    $_SESSION['fbid']  = $fbid;   
    $_SESSION['full_name'] = $full_name; 
    $_SESSION['first_name'] = $first_name; 
    $_SESSION['last_name'] = $last_name; 
    $_SESSION['email']  = $email; 
    $_SESSION['birthday'] = $birthday; 
    $_SESSION['gender']  = $gender; 

    /* ---- header location after session ----*/ 
    header("Location: ../login_fb.php"); 

} else { 
    $loginUrl = $helper->getLoginUrl(); 
    header("Location: ".$loginUrl); 
} 

Antwort

0

Du $helper->getLoginUrl zweimal aufrufen. Das erste Mal, dass Sie email im Bereich haben, aber Sie nichts mit dem Rückgabewert der Funktion tun; und beim zweiten Mal fragen Sie überhaupt keine Berechtigungen.

Entfernen Sie den ersten Aufruf dieser Methode vollständig. Ein mehrmaliger Aufruf führt zu Problemen mit dem zufälligen Wert state, der in der Sitzung gespeichert wird. Fügen Sie dann die Berechtigung dem Bereich in dem verbleibenden Aufruf hinzu, bevor Sie zu dieser URL umleiten.


FYI: Automatische Umleitung von Benutzern auf den Anmeldedialog wird als schlechte Praxis und schlechte UX; während o.k. Zu Testzwecken sollten Sie in einer echten, benutzerorientierten App die Anmeldung nur dann auslösen, wenn der Benutzer sie anfordert.

+1

Danke, es funktioniert jetzt – Polo

Verwandte Themen