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