Php 使用facebook SDK 4.0获取电子邮件

Php 使用facebook SDK 4.0获取电子邮件,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,这是我的密码。我正在尝试获取用户电子邮件,但我无法。昨天我收到的邮件是正确的,但我错把文件删除了。我现在错过了什么 在login_fb.php中,我这样调用电子邮件:echo$\u SESSION['email'] session_start(); //added in v4.0.0 require_once 'autoload.php'; use Facebook\FacebookSession; use Facebook\FacebookRedirectLoginHelper; use Fa

这是我的密码。我正在尝试获取用户电子邮件,但我无法。昨天我收到的邮件是正确的,但我错把文件删除了。我现在错过了什么

在login_fb.php中,我这样调用电子邮件:
echo$\u 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);
}

您正在调用
$helper->getLoginUrl
两次。第一次在作用域中有
电子邮件
,但没有使用函数的返回值执行任何操作;第二次你根本不需要任何权限

完全删除对该方法的第一个调用。多次调用它将导致存储到会话中的随机
状态
值出现问题。然后在重定向到该URL之前,将权限添加到剩余调用中的作用域中



仅供参考:自动将用户重定向到登录对话框被视为不良做法和不良用户体验;虽然出于测试目的还可以,但在真正面向用户的应用程序中,您应该仅在用户请求时触发登录。

您正在调用
$helper->getLoginUrl
两次。第一次在作用域中有
电子邮件
,但没有使用函数的返回值执行任何操作;第二次你根本不需要任何权限

完全删除对该方法的第一个调用。多次调用它将导致存储到会话中的随机
状态
值出现问题。然后在重定向到该URL之前,将权限添加到剩余调用中的作用域中


仅供参考:自动将用户重定向到登录对话框被视为不良做法和不良用户体验;虽然出于测试目的可以,但在真正面向用户的应用程序中,您应该仅在用户请求时触发登录