无法保存电子邮件和图像FB OAuth

时间:2015-07-23 19:02:53

标签: php facebook facebook-graph-api facebook-oauth

我使用FB PHP SDK 4.2通过FB登录授予用户访问权限。除了两个问题外,一切都完美无缺:

  1. 我没有收到任何邮件来保存它。
  2. M没有得到任何用户图片。
  3. 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 函数用于保存数据库中的数据

1 个答案:

答案 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>