2016-01-12 85 views
0

我使用https://github.com/sahat/satellizer在我的angular + laravel(5.2)应用程序中添加带有facebook功能的登录。卫星导航:在登录facebook时不返回电子邮件

这里是我使用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和名称。我曾尝试在网址中添加ID,名称和电子邮件地址为

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

它仍然只返回id和名称。

我也试图在Graph API Explorer中使用由上述请求返回的令牌。它显示适当的反应。

enter image description here

感谢

+0

相应地更新了我的答案。我没有看到使用任何范围参数,所以我假设你没有授权的电子邮件许可。 – luschn

+0

我已经检查过,给这个应用程序的电子邮件许可。也正如你可以看到我的问题,我也尝试添加字段来请求网址https://graph.facebook.com/v2.5/me?fields=id,name,email,但它仍然只返回id和名称 –

+0

所以你在api资源管理器中用你自己的应用程序来试试它?你有完全相同的回应吗? – luschn

回答

0

您需要用电子邮件许可授权的,当然。并且电子邮件必须得到确认。你不能百分百地收到电子邮件,有些用户使用他们的电话号码登录。

正如您在截图中看到的,您正在使用API​​ Explorer中的“图形API资源管理器”应用程序。切换到您自己的应用程序并授权使用电子邮件许可。

这是it's正在讨论:用户授予“电子邮件”的权限后https://github.com/sahat/satellizer/issues/615

+0

hi @luschn感谢回复。我正在用我自己的fb帐户尝试此操作。我有权访问我的电子邮件地址。我已经添加了Fb图形API浏览器的屏幕截图,您可以看到它正在返回电子邮件ID和其他具有通过上述代码获得的令牌的详细信息。 –

+0

添加了一个链接到我的答案,人们在github上讨论这个问题 – luschn

+0

感谢@Luschn我已经在那里发布我的问题。 –

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 
] 
]); 
相关问题