Загрузка...

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

Тема в разделе Backend создана пользователем Hangman666 13 июн 2016. 401 просмотр

Загрузка...
  1. Hangman666
    Hangman666 Автор темы 13 июн 2016 Хранитель Идей 342 10 мар 2016
    [IMG]
    Авторизация через соцсети это одна из самих частых задач с которыми сталкиваются разработчики развлекательных сайтов. Казалось бы там и делать нечего, ведь для каждого 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 \PHPixie\Slice();
    $config = $slice->arrayData($config);

    $social = new \PHPixie\Social($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 и логин запомнится через сессию. При последующем логине будет уже использоваться сущность с базы.
     
  2. cR0NuS
    cR0NuS 13 июн 2016 Заблокирован(а) 218 3 май 2016
    @Hangman666,Где то я уже такое читал ....
     
  3. Hangman666
    Hangman666 Автор темы 13 июн 2016 Хранитель Идей 342 10 мар 2016
    Habrahabr
     
Top