SocialAuther

SocialAuther - это PHP библиотека для упрощения реализации аутентификации на вашем сайте через популярные социальные сети и сервисы:

Заметка: в данном примере настройка осуществляется для локального сервера

Заметка: для работы библиотеки подключите автозагрузчик классов require_once 'lib/SocialAuther/autoload.php';

Использование

Аутентификация через ВКонтакте

Внимание! Если при переходе по ссылке авторизации, которую генериует метод $vkAdapter->getAuthUrl(), в качестве ответа выводится сооб щение {"error":"invalid_request","error_description":"Security Error"}, то вам необходимо отправиться на страницу настроек вашего vk аккаунта. В разделе "Безопасность Вашей страницы" нажмите ссылку "Посмотреть историю активности". В открывшемся окне нажмите "Завершить все сеансы", для очистки vk кэша. Таким образом, возникшая проблема security_error будет устранена.

Для осуществления аутентификации через социальную сеть ВКонтакте вам необходимо предварительно создать новый проект и сконфигурировать параметры: client_id, client_secret и redirect_uri:

  • Шаг 1. Создание нового приложения:
    • название: "SocialAuther Test"
    • тип: "Веб-сайт"
  • Шаг 2. Настройка секции "Open API":
    • адрес сайта: http://localhost/auth?provider=vk
    • базовый домен: "localhost"
  • Шаг 3. Конфигурация параметров client_id, client_secret и redirect_uri:
    • client_id - содержится в опции "ID приложения". Пример: 3078654
    • client_secret - содержится в опции "Защищенный ключ". Пример: zrCHcmKAcBvblSUIBIwu
    • redirect_uri - содержится в опции "Адрес сайта". Пример: http://localhost/auth?provider=vk
  • Шаг 4. Использование SocialAuther.

Применение SocialAuther:

<?php

// конфигурация настроек адаптера
$vkAdapterConfig = array(
    'client_id'     => '3078654',
    'client_secret' => 'zrCHcmKAcBvblSUIBIwu',
    'redirect_uri'  => 'http://localhost/auth?provider=vk'
);

// создание адаптера и передача настроек
$vkAdapter = new SocialAuther\Adapter\Vk($vkAdapterConfig);

// передача адаптера в SocialAuther
$auther = new SocialAuther\SocialAuther($vkAdapter);

// аутентификация и вывод данных пользователя или вывод ссылки для аутентификации
if (!isset($_GET['code'])) {
	echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через ВКонтакте</a></p>';
} else {
	if ($auther->authenticate()) {
		if (!is_null($auther->getSocialId()))
			echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';
		
		if (!is_null($auther->getName()))
			echo "Имя пользователя: " . $auther->getName() . '<br />';
		
		if (!is_null($auther->getEmail()))
			echo "Email пользователя: " . $auther->getEmail() . '<br />';
		
		if (!is_null($auther->getSocialPage()))
			echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

		if (!is_null($auther->getSex()))
			echo "Пол пользователя: " . $auther->getSex() . '<br />';

		if (!is_null($auther->getBirthday()))
			echo "День Рождения: " . $auther->getBirthday() . '<br />';

		// аватар пользователя 
		if (!is_null($auther->getAvatar()))
			echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
	}
}

Аутентификация через Одноклассники

Для осуществления аутентификации через социальную сеть Одноклассники вам необходимо предварительно создать новый проект и сконфигурировать параметры: client_id, client_secret, redirect_uri, public_key:

  • Шаг 1. Создание нового приложения:
    • Выбираем "Вне Одноклассников"
    • Выбираем "oAuth авторизация"
  • Шаг 2. Настройка приложения:
    • название: "SocialAuther Test"
    • shortname: _www.odnoklassniki.ru/game/auther
    • ссылка на приложение: http://localhost/auth?provider=odnoklassniki
    • "Ссылка на картинку" и "Ссылка на аватарку": ссылка на любое изображение
  • Шаг 3. Конфигурация параметров client_id, client_secret, redirect_uri, public_key. Всю нужную информацию вы найдёте в письме, которое было отправлено на вашу электронную почту после успешного добавления приложения:
    • client_id - Application ID. Пример: 658606315
    • client_secret - секретный ключ приложения. Пример: C35045020A8C7C066F25C4C7
    • redirect_uri - ссылка на приложение. Пример: http://localhost/auth?provider=odnoklassniki
    • public_key - публичный ключ приложения. Пример: BAMKABABACADCBBAB
  • Шаг 4. Использование SocialAuther.

Применение SocialAuther:

<?php

$odnoklassnikiConfig = array(
    'client_id'     => '658606315',
    'client_secret' => 'C35045020A8C7C066F25C4C7',
    'redirect_uri'  => 'http://localhost/auth?provider=odnoklassniki',
    'public_key'    => 'BAMKABABACADCBBAB'
);

$odnoklassnikiAdapter = new SocialAuther\Adapter\Odnoklassniki($odnoklassnikiConfig);

$auther = new SocialAuther\SocialAuther($odnoklassnikiAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Одноклассники</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

Аутентификация через Mail.ru

  • Шаг 1. Создание нового приложения:
    • соглашаемся с правилами
    • название: "SocialAuther Test"
    • адрес главной страницы: http://localhost/auth?provider=mailru
  • Шаг 2. Настройка приложения:
    • скачиваем предложенный файл receiver.html и помещаем в папку проекта
    • для установки на локальный сервер, нажимаем "Пропустить"
  • Шаг 3. Конфигурация параметров client_id, client_secret, redirect_uri:
    • client_id - ID. Пример: 670707
    • client_secret - секретный ключ. Пример: a619062972f2073ded61405b8f8eccd2
    • redirect_uri - адрес главной страницы. Пример: http://localhost/auth?provider=mailru
  • Шаг 4. Использование SocialAuther.

Применение SocialAuther:

<?php

$mailruAdapterConfig = array(
    'client_id'     => '670707',
    'client_secret' => 'a619062972f2073ded61405b8f8eccd2',
    'redirect_uri'  => 'http://localhost/auth?provider=mailru'
);

$mailruAdapter = new SocialAuther\Adapter\Mailru($mailruAdapterConfig);

$auther = new SocialAuther\SocialAuther($mailruAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Mail.ru</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

Аутентификация через Yandex

  • Шаг 1. Создание нового приложения:
  • Шаг 2. Настройка приложения:
    • Название: "SocialAuther Test"
    • Права: "Яндекс.Логин - Адрес электронной почты; Дата рождения; Имя пользователя, ФИО, пол"
    • Callback URI: http://localhost/auth?provider=yandex
  • Шаг 3. Конфигурация параметров client_id, client_secret, redirect_uri:
    • client_id - Id приложения. Пример: bff0bfcaef054ab66c0538b39e0a86cf
    • client_secret - Пароль приложения. Пример: 219ba88d386b114b9c6abef7eab4e8e4
    • redirect_uri - Callback URI. Пример: http://localhost/auth?provider=yandex
  • Шаг 4. Использование SocialAuther.

Применение SocialAuther:

<?php

$yandexAdapterConfig = array(
    'client_id'     => 'bff0bfcaef054ab66c0538b39e0a86cf',
    'client_secret' => '219ba88d386b114b9c6abef7eab4e8e4',
    'redirect_uri'  => 'http://localhost/auth?provider=yandex'
);

$yandexAdapter = new SocialAuther\Adapter\Yandex($yandexAdapterConfig);

$auther = new SocialAuther\SocialAuther($yandexAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Yandex</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

Аутентификация через Google

  • Шаг 1. Создание нового приложения:
    • в меню выбираем "API Access"
    • нажимаем на кнопку "Create an OAuth 2.0 Client ID..."
  • Шаг 2. Настройка приложения:
    • API Access: "SocialAuther Test"
    • Нажимаем Next
    • Application Type: "Web application"
    • Your site or hostname: localhost/google-auth
    • Нажимаем Create client ID
  • Шаг 3. Конфигурация параметров client_id, client_secret, redirect_uri:
    • client_id - Id приложения. Пример: 333739311538.apps.googleusercontent.com
    • client_secret - Пароль приложения. Пример: lZB3aW8UG8gDj6WVIEIcidt5
    • redirect_uri - Callback URI. Пример: http://localhost/auth?provider=google
  • Шаг 4. Использование SocialAuther.

Применение SocialAuther:

<?php

$googleAdapterConfig = array(
    'client_id'     => '393337311853.apps.googleusercontent.com',
    'client_secret' => 'B38WaUlZG8gDI6jIEWVct5id',
    'redirect_uri'  => 'http://localhost/auth?provider=google'
);

$googleAdapter = new SocialAuther\Adapter\Google($googleAdapterConfig);

$auther = new SocialAuther\SocialAuther($googleAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Google</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

Аутентификация через Facebook

  • Шаг 1. Создание нового приложения:
    • Нажимаем на кнопку "+ Создать новое приложение"
    • App Name: "SocialAuther Test"
    • Нажимаем "Продолжить"
  • Шаг 2. Настройка приложения:
    • Нажимаем "Website with Facebook Login"
    • Вводим Site URL: http://localhost/auth?provider=facebook
  • Шаг 3. Конфигурация параметров client_id, client_secret, redirect_uri:
    • client_id - App ID. Пример: 346158195993388
    • client_secret - App Secret. Пример: 2de1ab376d1c17cd47250920c05ab386
    • redirect_uri - Callback URI. Пример: http://localhost/auth?provider=facebook
  • Шаг 4. Использование SocialAuther.

Применение SocialAuther:

<?php

$facebookAdapterConfig = array(
    'client_id'     => '346158195993388',
    'client_secret' => '2de1ab376d1c17cd47250920c05ab386',
    'redirect_uri'  => 'http://localhost/auth?provider=facebook'
);

$facebookAdapter = new SocialAuther\Adapter\Facebook($facebookAdapterConfig);

$auther = new SocialAuther\SocialAuther($facebookAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Facebook</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

Аутентификация через Twitter

Внимание! Для корректной работы аутентификации через Twitter на сервере должны быть выставлены настройки времени и даты, близкие к реальным. Погрешность в несколько минут допустима, но при больших отклонениях проблемы могут возникнуть уже на этапе формирования URL для аутентификации

  • Шаг 1. Создание нового приложения:
  • Шаг 2. Конфигурация параметров client_id, client_secret и redirect_uri:
    • client_id - API key. Пример: ef054ab66c0538b39e0a865cf
    • client_secret - API secret. Пример: 6d6c0538b39e0a86cf219ba88d386b114b9c6abef7eab4e8e4
    • redirect_uri - Callback URL. Пример: http://localhost/auth?provider=twitter
  • Шаг 3. Использование SocialAuther.

Применение SocialAuther:

<?php

// конфигурация настроек адаптера
$twiAdapterConfig = array(
    'client_id'     => 'ef054ab66c0538b39e0a865cf',
    'client_secret' => '6d6c0538b39e0a86cf219ba88d386b114b9c6abef7eab4e8e4',
    'redirect_uri'  => 'http://localhost/auth?provider=twitter'
);

// создание адаптера и передача настроек
$twiAdapter = new SocialAuther\Adapter\Twitter($twiAdapterConfig);

// передача адаптера в SocialAuther
$auther = new SocialAuther\SocialAuther($twiAdapter);

// аутентификация и вывод данных пользователя или вывод ссылки для аутентификации
if (!isset($_GET[$auther->getResponseType()]) {
	echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Twitter</a></p>';
} else {
	if ($auther->authenticate()) {
		if (!is_null($auther->getSocialId()))
			echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';
		
		if (!is_null($auther->getName()))
			echo "Имя пользователя: " . $auther->getName() . '<br />';
		
		if (!is_null($auther->getEmail()))
			echo "Email пользователя: " . $auther->getEmail() . '<br />';
		
		if (!is_null($auther->getSocialPage()))
			echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

		if (!is_null($auther->getSex()))
			echo "Пол пользователя: " . $auther->getSex() . '<br />';

		if (!is_null($auther->getBirthday()))
			echo "День Рождения: " . $auther->getBirthday() . '<br />';

		// аватар пользователя 
		if (!is_null($auther->getAvatar()))
			echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
	}
}

Использование SocialAuther с несколькими социальными сетями и сервисами

<?php

$adapterConfigs = array(
    'vk' => array(
        'client_id'     => '3078654',
        'client_secret' => 'zrCHcmKAcBvblSUIBIwu',
        'redirect_uri'  => 'http://localhost/auth/?provider=vk'
    ),
    'odnoklassniki' => array(
        'client_id'     => '658606315',
        'client_secret' => 'C35045020A8C7C066F25C4C7',
        'redirect_uri'  => 'http://localhost/auth?provider=odnoklassniki',
        'public_key'    => 'BAMKABABACADCBBAB'
    ),
    'mailru' => array(
        'client_id'     => '670707',
        'client_secret' => 'a619062972f2073ded61405b8f8eccd2',
        'redirect_uri'  => 'http://localhost/auth/?provider=mailru'
    ),
    'yandex' => array(
        'client_id'     => 'bff0bfcaef054ab66c0538b39e0a86cf',
        'client_secret' => '219ba88d386b114b9c6abef7eab4e8e4',
        'redirect_uri'  => 'http://localhost/auth/?provider=yandex'
    ),
    'google' => array(
        'client_id'     => '393337311853.apps.googleusercontent.com',
        'client_secret' => 'B38WaUlZG8gDI6jIEWVct5id',
        'redirect_uri'  => 'http://localhost/auth?provider=google'
    ),
    'facebook' => array(
        'client_id'     => '346158195993388',
        'client_secret' => '2de1ab376d1c17cd47250920c05ab386',
        'redirect_uri'  => 'http://localhost/auth?provider=facebook'
    )
    'twitter' => array(
        'client_id'     => 'ef054ab66c0538b39e0a865cf',
        'client_secret' => '6d6c0538b39e0a86cf219ba88d386b114b9c6abef7eab4e8e4',
        'redirect_uri'  => 'http://localhost/auth?provider=twitter'
    )
);

// создание адаптеров
$adapters = array();
$responses = array();
foreach ($adapterConfigs as $adapter => $settings) {
    $class = 'SocialAuther\Adapter\\' . ucfirst($adapter);
    $adapters[$adapter] = new $class($settings);
    $responses[$adapter] = $adapters[$adapter]->getResponseType();
}

if (!isset($_GET['provider']) 
	|| !array_key_exists($_GET['provider'], $adapters) 
	|| !isset($_GET[$responses[$_GET['provider']]])) {
    foreach ($adapters as $title => $adapter) {
        echo '<p><a href="' . $adapter->getAuthUrl() . '">Аутентификация через ' . ucfirst($title) . '</a></p>';
    }
} else {
    $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);

    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

История изменений

SocialAuther 1.0

SocialAuther 1.01

  • Добавлена возможность аутентификации через Twitter.
  • Добавлено получение email при аутентификации через ВКонтакте.