如何使用PHP Facebook SDK v4获取用户的电子邮件地址?

时间:2014-07-14 10:07:36

标签: php facebook facebook-graph-api laravel facebook-php-sdk

我目前正在将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登录按钮时,我被正确地要求公开个人资料和电子邮件权限,然后重定向回回调网址。

我在回调网址时遇到的代码是:

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是相当新的,文档略有缺乏部分。感谢

0 个答案:

没有答案