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

Php Facebook Graph API的CodeIgniter Auth2库:未获取电子邮件地址,php,facebook,codeigniter,facebook-graph-api-v2.0,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',$provi

我是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);
        }

    }
}
请帮帮我


谢谢

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

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


我建议使用SDK而不是文件内容,因为这样可以更容易地执行Oauth身份验证。

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

下面是代码igniter-oauth2的解决方法

我知道它已被弃用,但我在Facebook提供商中有一个小补丁 (Provider/Facebook.php)

第28行。更改:$url= “?”.http_生成_查询(数组)( 'access_token'=>$token->access_token]

指向此:$url= “?”.http_生成_查询(数组)( '访问令牌'=>$token->访问令牌,'字段'=> “身份证、姓名、电子邮件、名、姓”)