2016-01-12 105 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 
] 
]); 
相關問題