卫星:登录Facebook时不返回电子邮件

时间:2016-01-12 13:03:49

标签: php facebook-graph-api laravel-5 facebook-login satellizer

我正在使用https://github.com/sahat/satellizer在我的angular + laravel(5.2)应用程序中添加登录功能。

这是我在php中用来调用facebook图api的代码

 $client = new GuzzleHttp\Client();

    $params = [
        'code' => $request->input('code'),
        'client_id' => $request->input('clientId'),
        'redirect_uri' => $request->input('redirectUri'),
        'client_secret' => Config::get('app.facebook_secret')
    ];

    // Step 1. Exchange authorization code for access token.
    $accessTokenResponse = $client->request('GET', 'https://graph.facebook.com/v2.5/oauth/access_token', [
        'query' => $params
    ]);
    $accessToken = json_decode($accessTokenResponse->getBody(), true);

    // Step 2. Retrieve profile information about the current user.
    $profileResponse = $client->request('GET', 'https://graph.facebook.com/v2.5/me', [
        'query' => $accessToken
    ]);
    $profile = json_decode($profileResponse->getBody(), true); 

但它只是在响应中返回id和name。我已尝试在网址中添加ID,名称和电子邮件作为

的字段
 $profileResponse = $client->request('GET', 'https://graph.facebook.com/v2.5/me?fields=id,name,email', [
        'query' => $accessToken
    ]);

仍然只返回id和name。

我还在Graph API Explorer中尝试了上述请求返回的令牌。它显示了适当的反应。

enter image description here

由于

3 个答案:

答案 0 :(得分:0)

当然,您需要使用电子邮件权限进行授权。电子邮件必须得到确认。您无法100%确定收到电子邮件,有些用户使用他们的电话号码登录。

正如您在屏幕截图中看到的那样,您正在使用API​​ Explorer中的“Graph API Explorer”应用程序。切换到您自己的应用程序并使用电子邮件权限进行授权。

这是讨论的地方:https://github.com/sahat/satellizer/issues/615

答案 1 :(得分:0)

只有在用户授予“电子邮件”权限后,才能在“用户”对象上访问“电子邮件”字段。enter image description here

答案 2 :(得分:0)

在这里创建了一个问题https://github.com/sahat/satellizer/issues/701,经过包裹作者调查后,guzzel请求出了问题

作者已回复此修复程序。用以下代码替换请求。

$fields = 'id,email,first_name,last_name,link,name,picture';
$profileResponse = $client->request('GET', 'https://graph.facebook.com/v2.5/me', [
'query' => [
    'access_token' => $accessToken['access_token'],
    'fields' => $fields
]
]);