Intereting Posts

Пользователь Facebook График не возвращает Email PHP

Я новичок во всем API Facebook. Я создаю страницу входа для пользователей, и идея заключается в том, что они заходят в Facebook.

В верхней части страницы входа у меня есть следующий код:

$fb = new Facebook\Facebook([ 'app_id' => "$fb_appid", 'app_secret' => "$fb_appsecret", 'default_graph_version' => 'v2.2', ]); 

Затем немного ниже у меня есть кнопка входа:

 if(isset($fb)){ $helper = $fb->getRedirectLoginHelper(); $permissions = ['email']; // optional $fb_login_url = $helper->getLoginUrl("$server_url/public/facebook/login-callback", $permissions); } else $fb_login_url = ""; if(strlen($fb_login_url) >= 1) echo "<a href='$fb_login_url'><i class='fa fa-2x fa-facebook-square'></i></a>"; else echo "<a href='#' disabled='disabled'><i class='fa fa-2x fa-facebook-square'></i></a>"; 

Код работает до тех пор, пока он не появится, если я нажму кнопку, я перейду на портал Facebook, разрешаю разрешения и т. Д., Затем он перенаправляет меня на login-callback .

Код для login-callback :

 if(isset($fb)){ $helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { $err_message = 'Graph returned an error: ' . $e->getMessage(); access_log("facebook_login","IP:$client_ip\r\nFacebook Error: $err_message"); } catch(Facebook\Exceptions\FacebookSDKException $e) { $err_message = 'Facebook SDK returned an error: ' . $e->getMessage(); access_log("facebook_login","IP:$client_ip\r\nFacebook Error: $err_message"); } if (strlen($err_message) <= 0 && isset($accessToken)) { $_SESSION['facebook_access_token'] = (string) $accessToken; $fb->setDefaultAccessToken("$accessToken"); try { $response = $fb->get('/me'); $userNode = $response->getGraphUser(); // $username = $userNode->getName(); // $firstname = $userNode->getFirstName(); // $lastname = $userNode->getLastName(); print_r($userNode); } catch(Facebook\Exceptions\FacebookResponseException $e) { $err_message = 'Graph returned an error: ' . $e->getMessage(); access_log("facebook_login","IP:$client_ip\r\nFacebook Error: $err_message"); } catch(Facebook\Exceptions\FacebookSDKException $e) { $err_message = 'Facebook SDK returned an error: ' . $e->getMessage(); access_log("facebook_login","IP:$client_ip\r\nFacebook Error: $err_message"); } } } 

$userNode выглядит так:

 Facebook\GraphNodes\GraphUser Object ( [items:protected] => Array ( [name] => Jacques Koekemoer [id] => xxxxxxxxxxxxxxxxxx ) ) 

Я установил разрешения для разрешения электронной почты, и если я не ошибаюсь, публичный профиль отправляется автоматически.

Я также проверил, что кнопка на странице входа имеет «& scope = email». Ниже приведен код, который я имею прямо на странице прямо сейчас в кнопке входа:

https://www.facebook.com/v2.2/dialog/oauth?client_id=xxxxxxxx&state=xxxxxxxx&response_type=code&sdk=php-sdk-5.0.0&redirect_uri=http%3A%2F%2Fxxxxxxx.xxxxxxxxxxxx.co.za%2Fpublic%2Ffacebook%2Flogin-callback&scope=email

Я заменил имя client_id , state и domain, потому что я не хочу, чтобы эта информация была доступна публично, поскольку я не знаю, что люди могут с ней сделать.

Дайте мне знать, если это необходимо для решения проблемы.

Я использовал справочник Facebook здесь, чтобы установить и загрузить SDK.

Solutions Collecting From Web of "Пользователь Facebook График не возвращает Email PHP"

Я решил проблему.

Вам нужно запросить определенные поля из Facebook в функции get .

$response = $fb->get('/me?fields=id,name,email');

Это можно найти здесь .

Полный список полей, которые вы можете запросить, можно найти здесь .

пример

 if (isset($fb)) { $helper = $fb->getRedirectLoginHelper(); try { $accessToken = $helper->getAccessToken(); } catch (Facebook\Exceptions\FacebookResponseException $e) { $err_message = 'Graph returned an error: ' . $e->getMessage(); access_log("facebook_login", "IP:$client_ip\r\nFacebook Error: $err_message"); } catch (Facebook\Exceptions\FacebookSDKException $e) { $err_message = 'Facebook SDK returned an error: ' . $e->getMessage(); access_log("facebook_login", "IP:$client_ip\r\nFacebook Error: $err_message"); } if (strlen($err_message) <= 0 && isset($accessToken)) { $_SESSION['facebook_access_token'] = (string)$accessToken; $fb->setDefaultAccessToken("$accessToken"); try { // this here is where you specify the fields $response = $fb->get('/me?fields=id,name,email'); $userNode = $response->getGraphUser(); /* handle the result */ } catch (Facebook\Exceptions\FacebookResponseException $e) { $err_message = 'Graph returned an error: ' . $e->getMessage(); access_log("facebook_login", "IP:$client_ip\r\nFacebook Error: $err_message"); } catch (Facebook\Exceptions\FacebookSDKException $e) { $err_message = 'Facebook SDK returned an error: ' . $e->getMessage(); access_log("facebook_login", "IP:$client_ip\r\nFacebook Error: $err_message"); } } } 

Один из моих друзей пытался решить эту проблему за последние 5 дней. huummm очень раздражает. который получил любовь за 2 минуты …

Предположение: использование PHP для решения O2Authentication:

 $loginURL = $fb->getLoginUrl({your redirect URL},['email']); 

И работа выполнена.

С уважением

Jaiswar Vipin Kumar R.

Проверьте версию приложения, если она версия 2.2 или ниже, она будет работать нормально, это не так, как она не вернется. для этого вам нужно запросить api с возможностью доступа по электронной почте.