PHPixie Social — простая интеграция с соцсетями

0
19


Авторизация через соцсети это одна из самих частых задач с которыми сталкиваются разработчики развлекательных сайтов. Казалось бы там и делать нечего, ведь для каждого API существует PHP библиотека от самого вендора. Но что делать если надо подключить сразу несколько? Не хочется тянуть в проект кучу библиотек которые имплементируют один и тот же протокол OAuth, к тому же хотелось бы иметь какой-то единый интерфейс. PHPixie Social — маленькая библиотека с только одной зависимостью, которая позволяет легко работать сразу с Facebook, Twitter, Google и Вконтакте, а если вы используете PHPixie фреймворк то также сразу получаете авторизацию всего в несколько строчек кода.
Но сначала рассмотрим компонент сам по себе.

Конфигурация

<?php
$config = array(
// Имена провайдеров могут быть произвольными,
// но для простоты примера имя я взял с типа API
‘facebook’ => array(
‘type’ => ‘facebook’,
‘appId’ => »,
‘appSecret’ => »,

// опционально права которые запросить у пользователя,
‘permissions’ => array(),

// опционально версия API
‘apiVersion’ => ‘2.3’
),
‘twitter’ => array(
‘type’ => ‘twitter’,

// Twitter работает через OAuth 1.0a
// поэтому поля отличаются
‘consumerKey’ => »,
‘consumerSecret’ => »
),
‘google’ => array(
‘type’ => ‘google’,
‘appId’ => »,
‘appSecret’ => »,

// опционально
‘scope’ => array(),
‘apiVersion’ => ‘2.3’
),
‘vk’ => array(
‘type’ => ‘vk’,
‘appId’ => »,
‘appSecret’ => »,

// опционально
‘scope’ => array(),
‘apiVersion’ => ‘2.3’
),
);

Инициализация

// та единственная зависимость
$slice = new PHPixieSlice();
$config = $slice->arrayData($config);

$social = new PHPixieSocial($config);

Авторизация пользователя

Итак первое что нам надо сделать это запросить у пользователя авторизацию, для этого нам понадобится придумать какую-то ссылку куда API пришлет нам токен доступа. Тогда мы перенаправляем пользователя на страницу авторизации. Вот простой пример:

$callbackUrl = ‘http://localhost.com/callback=1’;

if(!isset($_GET[‘callback’])) {
//Если параметра нет, далаем редирект

$loginUrl = $social->get(‘facebook’)->loginUrl($callbackUrl);
header(‘Location: ‘.$loginUrl);

} else {
// Если параметр есть, значит это к нам пришел ответ от API,
// с ним придет еще много параметров которые Social обработает сам.
// Заметьте, что значение $callbackUrl тут тоже нужно
$socialUser = $social->get(‘faceebook’)->handleCallback($callbackUrl, $_GET);

if($socialUser === null) {
// Пользователь отклонил авторизацию
echo "You didn’t authorize our app";

}else{
// Запрос к API от имени пользователя
var_dump($socialUser->get(‘me’));
}
}

Объект пользователя

$socialUser->id(); // ID пользователя в соцсети

// Дополнительная информация доступна после логина
$socialUser->loginData();

// GET Запрос
$socialUser->get(‘some/endpoint’, $queryParams = array());

// POST Запрос
$socialUser->post(‘some/endpoint’, $data = array(), $queryParams = array());

// Произвольный запрос
$socialUser->api(‘PUT’, ‘some/endpoint’, $queryParams = array(), $data = array());

// Токен авторизации,
// его можно сериализировать и сохранить
// в сессии или в базе
$token = $social->token();

// Получить пользователя по токену
$socialUser = $social->get(‘facebook’)->user($token);

// Кстати запросы можно делать сразу с токеном
$social->get(‘facebook’)->get($token, ‘some/endpoint’, $queryParams = array());
$social->get(‘facebook’)->post($token, ‘some/endpoint’, $data = array(), $queryParams = array());
$social->get(‘facebook’)->api($token, ‘PUT’, ‘some/endpoint’, $queryParams = array(), $data = array());

Интеграция с фреймворком

В фреймворке по умолчанию доступен плагин к модулю авторизации, который обрабатывает логин пользователя и легко включается в его конфигурации. Те кто уже работает с фреймворком не найдут в этом ничего сложного, так что в этот раз вместо описания я оставлю ссылку на демо проект: https://github.com/phpixie/demo-socialauth

В нем пользователь сам выбирает через какую сеть авторизоваться. Если он зашел впервые, ему сразу-же создастся запись в табличке Users и логин запомнится через сессию. При последующем логине будет уже использоваться сущность с базы.

Чтобы попробовать Social, достаточно просто composer require phpixie/social, ну и как всегда, если у вас возникнуть какие-либо вопросы, обращайтесь сразу к нам в чат.

Источник