我在使用 Facebook SDK 4.4.0 / API 2.3 检索用户的电子邮件时遇到了一个小问题。
我通过开发人员facebook区域创建了我的应用程序,实际上我的PHP脚本中的目标是通过我的Facebook应用程序登录Facebook以检索已登录用户的一些信息,以在我的网站中创建基本配置文件。 我有两个PHP脚本,第一个获取facebook的登录URL,第二个在验证后检索用户数据。
的login.php
require_once(dirname(__FILE__).'/libs/facebook-php-sdk-v4-4.0-dev/autoload.php');
Facebook\FacebookSession::setDefaultApplication($a_config['settings']['facebook_app_id'], $a_config['settings']['facebook_app_secret']);
$o_helper = new Facebook\FacebookRedirectLoginHelper($s_facebook_login_backurl);
$s_facebook_login_url = $o_helper->getLoginUrl();
通过此 $ s_facebook_login_url 我在facebook应用程序中登录,以用户身份验证自己,然后通过参数 $ s_facebook_login_backurl 返回到我的第二个脚本。在这里,我有命令从我的个人资料中获取数据。我需要的一切都很好,除了电子邮件,找不到这个元素。
为registration.php
require_once(dirname(__FILE__).'/libs/facebook-php-sdk-v4-4.0-dev/autoload.php');
Facebook\FacebookSession::setDefaultApplication($a_config['settings']['facebook_app_id'], $a_config['settings']['facebook_app_secret']);
$o_social = Facebook\FacebookSession::newAppSession();
try {
$o_social->validate();
}
catch(...){
// exceptions
}
或
$o_helper = new Facebook\FacebookRedirectLoginHelper($s_facebook_login_backurl);
$o_social = $o_helper->getSessionFromRedirect();
然后
$s_request = '/me?fields=id,name,email,last_name,first_name,middle_name';
$o_request = new Facebook\FacebookRequest($o_social, 'GET', $s_request);
$o_response = $o_request->execute();
$o_graph_object = $o_response->getGraphObject();
$a_media = $o_graph_object->asArray();
$s_facebook_id = $a_media['id'];
$s_facebook_name = $a_media['first_name'];
$s_facebook_inbetweenname = $a_media['middle_name'];
$s_facebook_surname = $a_media['last_name'];
$s_facebook_email = $a_media['email'];
问题是最后一个变量 $ s_facebook_email 是完全空的。
在Facebook的开发者区域,在Graph API资源管理器中,我甚至测试了我的Facebook应用程序的GET请求,并检索了电子邮件,我设置了用户的权限(在用户数据权限中)和电子邮件(在扩展权限中)但通过SDK,电子邮件是唯一缺少的元素。
我甚至试图从我的用户设置中删除该应用程序,并再次进行身份验证,但它无法正常工作。 有人想收到电子邮件吗? 我在网上发现几乎总是相同的建议,但我可能会错过一些东西。
提前致谢
答案 0 :(得分:0)
根据docs,您可以指定要向用户提出的权限:
# login.php
$fb = new Facebook\Facebook([/* . . . */]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes']; // optional
$loginUrl = $helper->getLoginUrl('http://{your-website}/login-callback.php', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';