Миром овладели соцсети, а потому, мало кто станет регистрироваться на сайте или форуме, заполняя при этом кучу полей, добавляя аватарку и прочее. Дабы привлечь посетителей нам придется использовать API социальных сетей – где уже есть вся нужная нам информация для оформления профиля. Ранее мы уже рассматривали один из способов авторизации пользователя через «ВКонтакте», сегодня поговорим о Facebook.
Перед тем, как перейти к самому написанию скрипта, стоит сказать, что добавление авторизаций через социальные сети – это явная забота о пользователе (если через ваш ресурс не проходят денежные транзакции – там, все же, стоит быть осторожнее и строже). Сам в ближайшие время обязательно добавлю на falbar авторизацию через основные соцсети - пока просто руки не доходят. Данные, которые мы получаем через API соцсети, по понятным причинам, ограничены и могут изменяться, поэтому почту пользователя для рассылки, получить не удастся, хотя раньше и можно было.
У Facebook, как и у других ресурсов данного плана, очень подробное и многофункциональное API и очень запутанное. Возможно, это моё субъективное мнение, но, столкнувшись с надобностью использования API Facebook, я был этому не очень рад. Всё как бы на месте, но при этом найти то, что нужно - крайне трудно. Да и при создании приложения нужно немного попотеть, но об этом далее.
Создаём и настраиваем приложение Facebook
Думаю понятно - для того чтобы взаимодействовать с API социальной сети нам потребуется создать приложение и его настроить особым образам. В Facebook все ваши приложения находятся по этому адресу – приложения Facebook. При первом посещении данной странице вы нечего кроме большой зелёной кнопки «Create a New App» не обнаружите, по ней и кликаем.
После нажатия появиться форма, где необходимо указать: название, пространство имен и категорию приложения. Второй параметр не обязателен, ну и если вы ошиблись, но уже создали приложение, то все параметры можно будет изменить в дальнейшем.
Далее мы попадаем на главную страницу настроек приложения. Важный момент – это то, что приложение изначально выключено (это можно определить по индикатору состояния). Для работы скрипта нам потребуется использовать два параметра: App ID (индификатор приложения) и App Secret (секретный ключ приложения).
Продолжаем настраивать приложение и переходим на страницу «Settings». Тут указываем параметры: App Domains (базовый домен) и Contact Email (контактная почта). Без второго параметра не получиться включить приложение авторизации. Далее нажимаем на кнопку «Add Platform» и выбираем вебсайт, сохраняем изменения.
Нам осталось только включить приложение. Для это переходим на страницу «Status & Review» и переводим тумблер в состояние «Yes».
Вот мы и закончили создание и настройку приложении. Если сравнивать с «ВКонтакте», то в Facebook этот процесс занимает чуть больше времени.
Пишем PHP код для авторизации через Facebook
Принцип и логику написания скрипта я оставлю такой же, как и в написанной ранее статье - Аутентификация через «ВКонтакте». В ней я подробно описывал класс авторизации и методы, которые он в себя включает. Тут же я просто добавлю код с краткими пояснениями, чтобы не повторятся.
Собственно класс авторизации через Facebook:
class FBAuth{
public $settings = array();
public $auth_status = false;
public $user_info = array();
public function __construct($settings){
if(isset($settings["client_id"], $settings["client_secret"], $settings["redirect_uri"])){
$this->settings = $settings;
}
}
public function auth($code){
if($code && $this->settings){
$query = urldecode(http_build_query(array(
"client_id" => $this->settings["client_id"],
"redirect_uri" => $this->settings["redirect_uri"],
"client_secret" => $this->settings["client_secret"],
"code" => $code
)));
$token = json_decode(file_get_contents("https://graph.facebook.com/oauth/access_token?".$query), true);
if(isset($token["access_token"])){
$query = urldecode(http_build_query(array(
"access_token" => $token["access_token"],
"fields" => "id,first_name,last_name,picture.width(120).height(120)"
)));
$this->user_info = json_decode(file_get_contents("https://graph.facebook.com/me?".$query), true);
if(isset($this->user_info["id"])){
$this->auth_status = true;
return true;
}
}
}
return false;
}
public function get_link(){
if($this->settings){
$query = urldecode(http_build_query(array(
"client_id" => $this->settings["client_id"],
"redirect_uri" => $this->settings["redirect_uri"],
"response_type" => "code"
)));
return "https://www.facebook.com/dialog/oauth?".$query;
}
return false;
}
}
Данный класс формирует ссылку для авторизации при помощи метода get_link(). Пользователь, нажав на неё отправиться на странницу Facebook, где ему потребуется разрешить приложению получать данные по его профилю. После того, как посетитель это разрешит, его перенаправит обратно к нам сайт с GET параметром code. При помощи метода auth() мы вытягиваем нужные данные (Id, имя, фамилия и аватарку). Касательно автаркии в Facebook довольно удобно сделали то, что можно задать размеры желаемой картинки. Функция возвращает: при удачно исходе - true, при ином - false.
Переходим к самой странице, где будет кнопка авторизации. В начале подключаем файл с классом и создаем его объект, передав в конструктор исходные данные:
require_once("FBAuth.php");
$fb = new FBAuth(array(
"client_id" => "ID_приложения",
"client_secret" => "защищенный_ключ",
"redirect_uri" => "адрес_сайта"
));
if(isset($_GET["code"])){
if($fb->auth($_GET["code"])){
// Делаем свои дела
}
}
Отловив GET параметр, мы пытаемся авторизоваться и, если всё успешно, уже работаем непосредственно с базой данных (если пользователя нет - добавляем, или обновляем некоторые параметры). В нашем случае, для наглядности, просто выведем его данные из профиля:
if($fb->auth_status){
echo("Социальный ID пользователя: ".$fb->user_info["id"]);
echo("<br />");
echo("Имя пользователя: ".$fb->user_info["first_name"]);
echo("<br />");
echo("Фамилия пользователя: ".$fb->user_info["last_name"]);
echo("<br />");
echo("<img src='".$fb->user_info["picture"]["data"]["url"]."' alt='image' />");
}else{
echo("<a href='".$fb->get_link()."'>Войти</a>");
}