我使用FB PHP SDK 4.2通过FB登录授予用户访问权限。除了两个问题外,一切都完美无缺:
Rest User Name和FB Social ID,我可以保存在DB中。
以下是必填代码:
FacebookSession::setDefaultApplication(FB_APP_ID, FB_APP_SECRET);
$helper = new FacebookRedirectLoginHelper(FB_REDIRECT_URI);
if(isset($_GET['type']) && $_GET['type'] == 'facebook' ){
$fb_url = $helper->getLoginUrl(array('email'));
header('Location: ' . $fb_url);
}
$session = $helper->getSessionFromRedirect();
if(isset($_SESSION['token'])){
$session = new FacebookSession($_SESSION['token']);
try{
$session->validate(FB_APP_ID, FB_APP_SECRET);
}catch(FacebookAuthorizationException $e){
echo $e->getMessage();
}
}
$data = array();
if(isset($session)){
$_SESSION['token'] = $session->getToken();
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$graph = $response->getGraphObject(GraphUser::className());
$data = $graph->asArray();
$id = $graph->getId();
$image = "https://graph.facebook.com/".$id."/picture?width=100";
$data['image'] = $image;
if($user_obj->fb_login($data)){header('Location: ../');}
else{header('Location: ../');}
}
fb_login 函数用于保存数据库中的数据
答案 0 :(得分:1)
要检索当前登录用户的电子邮件,用户需要为您的应用授予email
权限。只有这样你才能找回它。您可以阅读有关权限here的更多信息。
同样在v2.4中,您只需获得一组最小字段,您需要在API调用中明确指定email
字段。
过去,Graph API调用的响应返回了一组默认值 领域。为了减少有效载荷大小并改善移动设备的延迟 网络我们减少了返回的默认字段的数量 大多数Graph API调用。在v2.4中,您需要以声明方式列出 您的电话的响应字段。
因此,在v2.4中,您需要明确指定字段。 e.g。
https://graph.facebook.com/me?fields=name,email&access_token=<user-access-token>