2016-04-19 11 views
1

これは私が持っているコードです。私はユーザーの電子メールを取得しようとしていますが、私はできません。昨日私は正しく電子メールを受け取りましたが、誤ってファイルを削除しました。私は今何が欠けているのですか? login_fb.phpでfacebook SDK 4.0でメールを受け取る

私はこのようなメールを呼んでいる: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); 
} 

答えて

0

あなたが二回$helper->getLoginUrlを呼んでいます。スコープ内に初めてemailがありますが、関数の戻り値で何もしていません。そして2回目にあなたは全くパーミッションを要求しません。

そのメソッドへの最初の呼び出しを完全に削除します。複数回呼び出すと、セッションに格納されるランダムなstateの値に問題が発生します。そのURLにリダイレクトする前に、残りの呼び出しのスコープにアクセス許可を追加します。


FYI:ユーザーをログインダイアログに自動的にリダイレクトすることは、悪い習慣と悪いUXとみなされます。一方、o.k.テスト目的のために、実際のユーザー向けアプリケーションでは、ユーザーがログインを要求したときにのみログインを開始する必要があります。

+1

ありがとうございました – Polo

関連する問題