Инструкция, как получить данные пользователя Facebook через авторизацию OAuth.
На странице https://developers.facebook.com/apps/ нужно создать приложение.
Указываем название приложения и контактный e-mail:
Чтобы включить приложение, нужно перейти в основные настройки и указать URL-адрес политики конфиденциальности и категорию.
Включаем приложение:
Создадим PHP-скрипт, который будет обрабатывать ответы от Facebook, к примеру https://example.com/login-facebook.php
Этот URL нужно добавить в список «Действительных URI перенаправления для OAuth» в настройках входа через Facebook.
После этого можно сформировать ссылку для входа:
https://www.facebook.com/dialog/oauth?client_id=
Идентификатор_приложения
&redirect_uri=https://example.com/login-facebook.php
&scope=email&response_type=code
В URL можно добавить параметр «state
» для передачи своих данных.
$params = array(
'client_id' => 'Идентификатор приложения',
'redirect_uri' => 'https://example.com/login-facebook.php',
'scope' => 'email',
'response_type' => 'code',
'state' => '123'
);
$url = 'https://www.facebook.com/dialog/oauth?' . urldecode(http_build_query($params));
echo '<a href="' . $url . '">Войти через Facebook</a>';
Кликнув по ссылке, пользователь переходит на страницу с диалогом:
После того, как пользователь подтвердил запрос, он будет перенаправлен на redirect_uri
с добавлением кода в GET-параметре.
В скрипте, полученный код отправляется запросом получения access_token
и по нему метод https://graph.facebook.com/me
возвращает id, имя, фамилию, e-mail и фото пользователя (полный список полей на https://developers.facebook.com/docs/graph-api/reference/user).
<?php
if (!empty($_GET['code'])) {
// var_dump($_GET['state']);
$params = array(
'client_id' => 'Идентификатор приложения',
'client_secret' => 'Секрет приложения',
'redirect_uri' => 'https://example.com/login-facebook.php',
'code' => $_GET['code']
);
// Получение access_token
$data = file_get_contents('https://graph.facebook.com/oauth/access_token?' . urldecode(http_build_query($params)));
$data = json_decode($data, true);
if (!empty($data['access_token'])) {
$params = array(
'access_token' => $data['access_token'],
'fields' => 'id,email,first_name,last_name,picture'
);
// Получение данных пользователя
$info = file_get_contents('https://graph.facebook.com/me?' . urldecode(http_build_query($params)));
$info = json_decode($info, true);
var_dump($info);
}
}
Результат:
array(
'id' => '123456789',
'email' => 'mail@example.com',
'first_name' => 'Иван',
'last_name' => 'Иванов',
'picture' => array(
'data' => (
'height' => 50,
'is_silhouette' => true,
'url' => 'https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=123456',
'width' => 50
}
}
}
После успешной авторизации Facebook добавляет #_=_
к адресу возврата.
Сделано это специально, поскольку некоторые браузеры, при редиректе переносят хеш из URL-адреса в новый URL. Такой хеш можно удалить: