用于Facebook Graph API的CodeIgniter Auth2库:未获取电子邮件地址

时间:2015-07-27 11:46:59

标签: php facebook codeigniter facebook-graph-api-v2.0

我是facebook与codeigniter整合的新手。

我已为codeigniter oauth(0.3.1)和oauth2(0.3.1)库完成了“使用facebook登录”功能的所有设置。

但我没有收到fb用户的电子邮件地址

我只从facebook获得姓名和身份证明。

我无法解决问题。

我正在使用以下CI代码

 public function oauth2($providername)
{

    $key = $this->config->item('key',$providername);
    $secret = $this->config->item('secret',$providername);

    $this->load->helper('url_helper');

    $this->load->spark('oauth2/0.3.1');

    $provider = $this->oauth2->provider($providername, array(
        'id' => $key,
        'secret' => $secret,
    ));
    //var_dump($provider);


    if ( ! $this->input->get('code'))
    {  

        if($providername =='facebook'){
            $url = 'http://example.com'.$provider->redirect_uri;
            redirect($url);
        }
        // By sending no options it'll come back here
       $provider->authorize();
    }
    else
    {
        // Howzit?
      //  echo "in else";die;
        try
        { 
            $token = $provider->access($_GET['code']);
            $user = $provider->get_user_info($token);
            print_r($user);die;
            $this->saveData($providername,$token,$user);

        }

        catch (OAuth2_Exception $e)
        {
            show_error('That didnt work: '.$e);
        }

    }
}

请帮助我。

由于

2 个答案:

答案 0 :(得分:1)

获取用户电子邮件地址的唯一方法是在电子邮件字段上请求扩展权限。用户必须允许您查看此内容,并且无法获取该用户朋友的电子邮件地址。

http://developers.facebook.com/docs/authentication/permissions

如果您通过在调用Auth对话框的get字符串中传递scope = email来使用Facebook连接,则可以执行此操作。

我建议使用SDK而不是file_get_contents,因为它可以更轻松地执行Oauth身份验证。

答案 1 :(得分:1)

在Facebook Graph API v2.4(2015/7/9发布)上,默认情况下不包含电子邮件字段,但我们需要明确指定要检索的字段。

Introducing Graph API v2.4

代码igniter-oauth2有解决方法,如下所示。

Facebook provider fields update #65

  

我知道它被弃用但我在Facebook提供商处有一点修复   (提供者/ Facebook.php)

     

第28行。更改:$ url =   ' https://graph.facebook.com/me'?.http_build_query(阵列(   '的access_token' => $ token-> access_token));

     

对此:$ url =   ' https://graph.facebook.com/me'?.http_build_query(阵列(   '的access_token' => $ token-> access_token,' fields' =>   '编号,姓名,电子邮件,名字,姓氏' ));