我目前正在将Facebook Login与现有的Laravel PHP应用程序集成 . 我正在使用facebook php sdk的4.0版本并取得了一些成功,但我现在已经打了一堵砖墙 .

我需要Facebook用户的电子邮件地址为用户创建一个帐户,我已经相应地设置了我的权限请求:

$helper = new LaravelFacebookRedirectLoginHelper(url('/login/fb/callback'));
return Redirect::away($helper->getLoginUrl(['email']));

LaravelFacebookRedirectLoginHelper类扩展了FacebookRedirectLoginHelper类,但是在Laravel不使用$ _SESSION变量时会覆盖storeState和loadState方法 .

当我使用Facebook登录按钮时,我被正确地要求公共配置文件和电子邮件权限,然后重定向回回调网址 .

当我回调url时,我目前拥有的代码是:

public function facebook_callback()
{
    $helper = new LaravelFacebookRedirectLoginHelper(url('/login/fb/callback'));

    $session = $helper->getSessionFromRedirect();

    if($session) {
        $request = new FacebookRequest($session, 'GET', '/me');

        $response = $request->execute();

        $profile = $response->getGraphObject(GraphUser::className());
    }
}

如果我转储配置文件变量,我会看到以下信息:

array (size=10)
  'id' => string redacted (length=17)
  'first_name' => string 'Ben' (length=3)
  'gender' => string 'male' (length=4)
  'last_name' => string 'Smith' (length=5)
  'link' => string redacted (length=62)
  'locale' => string 'en_GB' (length=5)
  'name' => string 'Ben Smith' (length=9)
  'timezone' => int 1
  'updated_time' => string '2014-02-15T14:42:46+0000' (length=24)
  'verified' => boolean true

如您所见,不包含任何电子邮件 . 我已尝试过许多不同的请求来返回用户的电子邮件地址,但无济于事 . 将?fields = email附加到/ me请求只返回用户ID . 我只能认为facebook不相信我有权访问用户的电子邮件,但是当我从帐户设置中查看授予的应用权限时,会包含电子邮件地址 .

任何帮助将不胜感激,v4 sdk是相当新的,文档略微缺乏部分 . 谢谢