Я использую FB PHP SDK 4.2, чтобы предоставить пользователям доступ через логин FB. Все просто отлично работает, кроме двух вопросов:
Имя пользователя и социальный идентификатор FB, я могу сохранить в БД.
Ниже необходим код:
FacebookSession::setDefaultApplication(FB_APP_ID, FB_APP_SECRET);
$helper = new FacebookRedirectLoginHelper(FB_REDIRECT_URI);
if(isset($_GET['type']) && $_GET['type'] == 'facebook' ){
$fb_url = $helper->getLoginUrl(array('email'));
header('Location: ' . $fb_url);
}
$session = $helper->getSessionFromRedirect();
if(isset($_SESSION['token'])){
$session = new FacebookSession($_SESSION['token']);
try{
$session->validate(FB_APP_ID, FB_APP_SECRET);
}catch(FacebookAuthorizationException $e){
echo $e->getMessage();
}
}
$data = array();
if(isset($session)){
$_SESSION['token'] = $session->getToken();
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
$graph = $response->getGraphObject(GraphUser::className());
$data = $graph->asArray();
$id = $graph->getId();
$image = "https://graph.facebook.com/".$id."/picture?width=100";
$data['image'] = $image;
if($user_obj->fb_login($data)){header('Location: ../');}
else{header('Location: ../');}
}
FB Логин функция используется для сохранения данных в базе данных
Чтобы получить адрес электронной почты пользователя, вошедшего в систему в данный момент, пользователь должен предоставить вашему приложению email
разрешение. Только тогда вы сможете получить его. Вы можете прочитать больше о разрешениях Вот.
Также в v2.4 вы получите только минимальный набор полей, для email
поле необходимо указать явно в вызове API.
В прошлом ответы от вызовов API API возвращали набор значений по умолчанию
поля. Для того, чтобы уменьшить размер полезной нагрузки и улучшить время ожидания на мобильном телефоне
сетей мы сократили количество полей по умолчанию, возвращаемых для
большинство вызовов Graph API. В v2.4 вам нужно будет декларативно перечислить
поля ответа для ваших звонков.
Так что в v2.4 вам нужно будет явно указать поля. например
https://graph.facebook.com/me?fields=name,email&access_token=<user-access-token>
Других решений пока нет …