• Главная»
  • Уроки»
  • PHP»
  • Создание аутентификации через социальные сети на вашем сайте

Создание аутентификации через социальные сети на вашем сайте

Доброго времени суток, сообщество руселлера! Сегодня мы поставим точку в вопросе о том, как организовать аутентификацию пользователей на вашем сайте через несколько социальных сетей.

sourse

Если вы следили за выходом статей, то должны быть в курсе, что мы уже рассмотрели, как создать аутентификацию через следующие социальные сети:

Сегодня мы рассмотрим более обобщённый пример с прикруткой к базе данных и прочими фишками.

Специально для того, чтоб вам было легче создать обсуждаемый нами функционал, я создал библиотеку SocialAuther, которая построена на основе выше упомянутых уроков. С её помощью, вы сможете буквально за несколько строк получить нужный функционал.

Саму библиотеку вы можете найти в исходниках, а также на GitHub. Это моя первая раздача, так что прошу строго не судить. На данный момент, поддерживается работа с шестью соц сетями: ВКонтакте, Одноклассниками, Mail.ru, Yandex, Google и Facebook. В будущем я планирую развивать и совершенствовать данную систему. Поскольку библиотека выложена в свободном доступе на GitHub, я буду рад всяческому содействию с вашей стороны. Ну а для того, чтобы посмотреть, как работает SocialAuther, давайте двигаться дальше.

Сразу же хочу уточнить одну деталь. Для работы библиотеки, вам понадобится версия PHP 5.3 и выше. Для того, чтобы понять, как использовать библиотеку SocialAuther, я буду приводить как частные, так и общие для этого урока примеры.

Автозагрузка классов

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

require_once 'lib/SocialAuther/autoload.php';

Использование SocialAuther с одной отдельной социальной сетью

Перед тем, как приступить к более обширному примеру, давайте рассмотрим использование библиотеки в рамках одной социальной сети. К примеру, “ВКонтакте”. Для начала нам нужно сконфигурировать массив с параметрами: `client_id`, `client_secret`, `redirect_uri`:

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

Далее создаём объект класса адаптера ВКонтакте и передаём сконфигурированные параметры:

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

После того, как адаптер сконфигурирован, создаём объект класса SocialAuther:

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

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

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $vkAdapter->getAuthUrl() . '">Аутентификация через ВКонтакте</a></p>';
}

Для совершения аутентификации достаточно вызвать метод authenticate(), который вернёт true, если всё произойдёт хорошо, и false, если возникнет ошибка:

if (isset($_GET['code'])) {
    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 />";
        }
}

Далее мы можем получить следующую информацию, которая нужна практически каждому: социальный ID пользователя, имя, email, ссылка на профиль пользователя, пол, день рождения и ссылку на аватар. Если данных в этом поле нет, то метод вернёт null.

Работать с остальными социальными сетями можно практически таким же образом. Более подробную информацию можете найти на GitHub.

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

Теперь мы займёмся применением SocialAuther при подключении нескольких социальных сетей.

Конфигурация параметров приложений

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

$adapterConfigs = array(
    'vk' => array(
        'client_id'     => '3774741',
        'client_secret' => '3nLWEs45iWeKypmVR2CU',
        'redirect_uri'  => 'http://localhost/auth/?provider=vk'
    ),
    'odnoklassniki' => array(
        'client_id'     => '168635560',
        'client_secret' => 'C342554C028C0A76605C7C0F',
        'redirect_uri'  => 'http://localhost/auth?provider=odnoklassniki',
        'public_key'    => 'CBADCBMKABABABABA'
    ),
    'mailru' => array(
        'client_id'     => '770076',
        'client_secret' => '5b8f8906167229feccd2a7320dd6e140',
        'redirect_uri'  => 'http://localhost/auth/?provider=mailru'
    ),
    'yandex' => array(
        'client_id'     => 'bfbff04a6cb60395ca05ef38be0a86cf',
        'client_secret' => '219ba8388d6e6af7abe4b4b119cbee48',
        'redirect_uri'  => 'http://localhost/auth/?provider=yandex'
    ),
    'google' => array(
        'client_id'     => '333193735318.apps.googleusercontent.com',
        'client_secret' => 'lZB3aW8gDjIEUG8I6WVcidt5',
        'redirect_uri'  => 'http://localhost/auth?provider=google'
    ),
    'facebook' => array(
        'client_id'     => '613418539539988',
        'client_secret' => '2deab137cc1d254d167720095ac0b386',
        'redirect_uri'  => 'http://localhost/auth?provider=facebook'
    )
);

1. Ключи 'vk', 'odnoklassniki', 'mailru', 'yandex', 'google' и 'facebook' выбраны не просто так. Эти названия в дальнейшем мы будем использовать для динамического создания каждого из адаптеров.

2. Обратите внимание, что к каждому `redirect_uri` мы приписали параметр `adapter`, который равен названию соц сети. Эти ссылки (пр. http://localhost/auth?provider=facebook), вам необходимо прописать в настройках каждого из приложения. Для ВКонтакте - vk, для Одноклассников - odnoklassniki и так далее. Благодаря данному параметру `provider`, мы сможем легко определить, через какую социальную сеть пытается авторизоваться пользователь.

Создание адаптеров классов.

Как я уже говорил, названия классов адаптеров будем формировать динамически:

$adapters = array();
foreach ($adapterConfigs as $adapter => $settings) {
    $class = 'SocialAuther\Adapter\\' . ucfirst($adapter);
    $adapters[$adapter] = new $class($settings);
}

Для того, чтобы было яснее, возьмём маленький пример. Берём фрагмент массива параметров:

$adapterConfigs = array(
...
    'odnoklassniki' => array(
        'client_id'     => '163586560',
        'client_secret' => 'C342505C754C028C0A766C0F',
        'redirect_uri'  => 'http://localhost/auth?provider=odnoklassniki',
        'public_key'    => 'CBADCBMKABABABABA'
    ),
...

Допустим, в цикле foreach пришёл черёд данного элемента с ключом `odnoklassniki`. Название ключа записывается в переменную $adapter, а массив с параметрами - в переменную $settings. Далее первая операция создаст имя класса, а вторая задаст ему параметры и запишет адаптер в общий массив.

// имя класса формируется автоматом - SocialAuther\Adapter\Odnoklassniki($adapter);
$class = 'SocialAuther\Adapter\\' . ucfirst($adapter);

// помещаем объект класса SocialAuther\Adapter\Odnoklassniki в общий массив $adapters
$adapters[$adapter] = new $class($settings);

Генерация ссылок аутентификации

Теперь где-то в html коде делаем проверку на наличие GET параметра code, и если он присутствует, то мы можем выводить ссылки для аутентификации:

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

Создание объекта SocialAuther для аутентификации пользователя

Создать объект SocialAuther и авторизовать пользователя мы можем, если к нам придёт GET параметр provider. Также если название адаптера совпадает хоть с одним из наших хранящихся в общем массиве, создаём объект класса SocialAuther и передаём адаптер той социальной сети, через которую авторизовался пользователь:

if (isset($_GET['provider']) && array_key_exists($_GET['provider'], $adapters)) {
	$auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);
}

Аутентификация пользователя и получение данных

Теперь, когда у нас есть объект SocialAuther, можем вызывать метод authenticate(), а затем получить данные о пользователе:

if ($auther->authenticate()) {
    $auther->getProvider();
    $auther->getSocialId();
    $auther->getName();
    $auther->getEmail();
    $auther->getSocialPage();
    $auther->getSex();
    $auther->getBirthday());
    $auther->getAvatar();
}

Прикрутка к БД

Итак, теперь когда наш основной скрипт готов, мы можем двигаться дальше и прикрутить информацию о пользователе к БД.

Создание БД и таблицы

Для данного урока создайте любую MySQL базу данных. Я назову её `auth`. В ней, с помощью данного кода, сгенерируйте таблицу:

CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `provider` ENUM('vk', 'odnoklassniki', 'mailru', 'yandex', 'google', 'facebook') NOT NULL,
    `social_id` VARCHAR(255) NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    `email` VARCHAR(255) NOT NULL,
    `social_page` VARCHAR(255) NOT NULL,
    `sex` ENUM('male', 'female') NOT NULL,
    `birthday` DATE NOT NULL,
    `avatar` VARCHAR(255) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

Поле id - это стандартный автоинкрементный индекс. В колонку `provider` записываем название социальной сети учётной записи пользователя. Все остальные поля соответствуют методам, которые мы можем вызвать от объекта SocialAuther для получения информации о пользователе.

Настройка подключения к БД

Данный функционал я предлагаю вынести в отдельный файл. К примеру, config.inc.php:

$db = mysql_connect('localhost', 'имя пользователя', 'пароль');
mysql_select_db('auth');
mysql_query("SET NAMES utf8");

Тут мы подключились к базе, выбрали таблицу и задали кодировку UTF8. Теперь данный файл можно присоединить к index.php и работать с таблицей.

Вставка нового пользователя

Итак, тут нам нужно предусмотреть следующее: если у нас в базе есть пользователь с социальным id и названием адаптера соц сети, которые мы получили в результате аутентификации, то пользователь уже ранее входил в нашу систему, и запись в таблице о нём есть. Если же такой записи нет, то мы должны записать нового пользователя в БД:

if ($auther->authenticate()) {

    $result = mysql_query(
        "SELECT *  FROM `users` WHERE `provider` = '{$auther->getProvider()}' AND `social_id` = '{$auther->getSocialId()}' LIMIT 1"
    );

    $record = mysql_fetch_array($result);
    if (!$record) {
        $values = array(
            $auther->getProvider(),
            $auther->getSocialId(),
            $auther->getName(),
            $auther->getEmail(),
            $auther->getSocialPage(),
            $auther->getSex(),
            date('Y-m-d', strtotime($auther->getBirthday())),
            $auther->getAvatar()
        );

        $query = "INSERT INTO `users` (`provider`, `social_id`, `name`, `email`, `social_page`, `sex`, `birthday`, `avatar`) VALUES ('";
        $query .= implode("', '", $values) . "')";
        $result = mysql_query($query);
    }
}

Тут всё происходит так, как я и говорил. Сначала проверяем, есть ли в таблице пользователь с пришедшем к нам id и provider. Если нет, то формируем массив значений, затем выполняем INSERT запрос.

Обновление данных пользователя в базе

Если в базе данных пользователь уже есть, то было бы неплохо проверить обновил ли он какие-то данные или нет. Для этого создаём объект стандартного класса и помещаем в него данные о пользователе из БД. Далее в коде, когда получим данные о пользователе из социалки, проверим данные два объекта на равенство и если они не равны, то обновим запись в базе.

if (!$record) {
...
else {
    $userFromDb = new stdClass();
    $userFromDb->provider   = $record['provider'];
    $userFromDb->socialId   = $record['social_id'];
    $userFromDb->name       = $record['name'];
    $userFromDb->email      = $record['email'];
    $userFromDb->socialPage = $record['social_page'];
    $userFromDb->sex        = $record['sex'];
    $userFromDb->birthday   = date('m.d.Y', strtotime($record['birthday']));
    $userFromDb->avatar     = $record['avatar'];
}
...
$user; // в переменной $user записываем данные из социалки

// проверяем на равенство объект с данными из БД и объект с данными из социалки
if (isset($userFromDb) && $userFromDb != $user) {
    $idToUpdate = $record['id'];
    $birthday = date('Y-m-d', strtotime($user->birthday));

    mysql_query(
        "UPDATE `users` SET " .
        "`social_id` = '{$user->socialId}', `name` = '{$user->name}', `email` = '{$user->email}', " .
        "`social_page` = '{$user->socialPage}', `sex` = '{$user->sex}', " .
        "`birthday` = '{$birthday}', `avatar` = '$user->avatar' " .
        "WHERE `id`='{$idToUpdate}'"
    );
}

Привязка к сессии

В принципе, нам осталось сделать только одно - привязать нашего пользователя к сессии, чтобы в дальнейшем, на других страницах, мы могли доставать информацию о нём. Делается это очень просто. Для начала в файл config.inc.php вписываем функцию активации сессий:

session_start();

Далее в index.php, после блока проверки существования пользователя, формируем объект стандартного класса (поля) и записываем в них информацию о пользователе:

$user = new stdClass();
$user->provider   = $auther->getProvider();
$user->socialId   = $auther->getSocialId();
$user->name       = $auther->getName();
$user->email      = $auther->getEmail();
$user->socialPage = $auther->getSocialPage();
$user->sex        = $auther->getSex();
$user->birthday   = $auther->getBirthday();
$user->avatar     = $auther->getAvatar();

Затем записываем только что созданный объект в сессию под ключом `user`.

$_SESSION['user'] = $user;

Теперь на любой другой странице (к примеру, info.php) достаём данные из сессии и выводим на экран:

<?php require_once 'config.inc.php'; ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title></title>
</head>
<body>

<?php if (isset($_SESSION['user'])) {
    $user = $_SESSION['user'];
    if (!is_null($user->socialId))
    echo "Социальный ID пользователя: " . $user->socialId . '<br />';

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

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

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

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

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

    // аватар пользователя
    if (!is_null($user->avatar))
    echo '<img src="' . $user->avatar . '" />'; echo "<br />";
    echo '<p><a href="logout.php">Выйти из системы</a></p>';
} else {
    echo '<p><a href="index.php">Войдите в систему</a> для того, чтобы увидеть данный материал.</p>';
} ?>

</body>
</html>

Файл config.inc.php подключать обязательно, ведь там находится вызов функции session_start().

Реализуем выход пользователя из системы

Рано или поздно пользователь захочет выйти из нашей системы. Для этого создадим отдельный файл logout.php:

<?php

session_start();
unset($_SESSION['user']);
header("location:index.php");

Тут просто удаляем сессию с ключом `user` и перенаправляем пользователя на главную страницу.

Последние штрихи

Ну, вот в принципе и всё. Что ещё можно добавить? Разве что можем усилить проверки на главной странице и в нескольких if-ах проверять наличие сессии. В общем, смотрите сами, как вам удобнее. Привожу полный код файла index.php:

<?php

require_once 'lib/SocialAuther/autoload.php';
require_once 'config.inc.php';

$adapterConfigs = array(
    'vk' => array(
        'client_id'     => '3774741',
        'client_secret' => '3nLWEs45iWeKypmVR2CU',
        'redirect_uri'  => 'http://localhost/auth/?provider=vk'
    ),
    'odnoklassniki' => array(
        'client_id'     => '168635560',
        'client_secret' => 'C342554C028C0A76605C7C0F',
        'redirect_uri'  => 'http://localhost/auth?provider=odnoklassniki',
        'public_key'    => 'CBADCBMKABABABABA'
    ),
    'mailru' => array(
        'client_id'     => '770076',
        'client_secret' => '5b8f8906167229feccd2a7320dd6e140',
        'redirect_uri'  => 'http://localhost/auth/?provider=mailru'
    ),
    'yandex' => array(
        'client_id'     => 'bfbff04a6cb60395ca05ef38be0a86cf',
        'client_secret' => '219ba8388d6e6af7abe4b4b119cbee48',
        'redirect_uri'  => 'http://localhost/auth/?provider=yandex'
    ),
    'google' => array(
        'client_id'     => '333193735318.apps.googleusercontent.com',
        'client_secret' => 'lZB3aW8gDjIEUG8I6WVcidt5',
        'redirect_uri'  => 'http://localhost/auth?provider=google'
    ),
    'facebook' => array(
        'client_id'     => '613418539539988',
        'client_secret' => '2deab137cc1d254d167720095ac0b386',
        'redirect_uri'  => 'http://localhost/auth?provider=facebook'
    )
);

$adapters = array();
foreach ($adapterConfigs as $adapter => $settings) {
    $class = 'SocialAuther\Adapter\\' . ucfirst($adapter);
    $adapters[$adapter] = new $class($settings);
}

if (isset($_GET['provider']) && array_key_exists($_GET['provider'], $adapters) && !isset($_SESSION['user'])) {
    $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);

    if ($auther->authenticate()) {

        $result = mysql_query(
            "SELECT *  FROM `users` WHERE `provider` = '{$auther->getProvider()}' AND `social_id` = '{$auther->getSocialId()}' LIMIT 1"
        );

        $record = mysql_fetch_array($result);
        if (!$record) {
            $values = array(
                $auther->getProvider(),
                $auther->getSocialId(),
                $auther->getName(),
                $auther->getEmail(),
                $auther->getSocialPage(),
                $auther->getSex(),
                date('Y-m-d', strtotime($auther->getBirthday())),
                $auther->getAvatar()
            );

            $query = "INSERT INTO `users` (`provider`, `social_id`, `name`, `email`, `social_page`, `sex`, `birthday`, `avatar`) VALUES ('";
            $query .= implode("', '", $values) . "')";
            $result = mysql_query($query);
        } else {
            $userFromDb = new stdClass();
            $userFromDb->provider   = $record['provider'];
            $userFromDb->socialId   = $record['social_id'];
            $userFromDb->name       = $record['name'];
            $userFromDb->email      = $record['email'];
            $userFromDb->socialPage = $record['social_page'];
            $userFromDb->sex        = $record['sex'];
            $userFromDb->birthday   = date('m.d.Y', strtotime($record['birthday']));
            $userFromDb->avatar     = $record['avatar'];
        }

        $user = new stdClass();
        $user->provider   = $auther->getProvider();
        $user->socialId   = $auther->getSocialId();
        $user->name       = $auther->getName();
        $user->email      = $auther->getEmail();
        $user->socialPage = $auther->getSocialPage();
        $user->sex        = $auther->getSex();
        $user->birthday   = $auther->getBirthday();
        $user->avatar     = $auther->getAvatar();

        if (isset($userFromDb) && $userFromDb != $user) {
            $idToUpdate = $record['id'];
            $birthday = date('Y-m-d', strtotime($user->birthday));

            mysql_query(
                "UPDATE `users` SET " .
                "`social_id` = '{$user->socialId}', `name` = '{$user->name}', `email` = '{$user->email}', " .
                "`social_page` = '{$user->socialPage}', `sex` = '{$user->sex}', " .
                "`birthday` = '{$birthday}', `avatar` = '$user->avatar' " .
                "WHERE `id`='{$idToUpdate}'"
            );
        }

        $_SESSION['user'] = $user;
    }

    header("location:index.php");
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title></title>
</head>
<body>

<?php
if (isset($_SESSION['user'])) {
    echo '<p><a href="info.php">Скрытый контент</a></p>';
} else if (!isset($_GET['code']) && !isset($_SESSION['user'])) {
    foreach ($adapters as $title => $adapter) {
        echo '<p><a href="' . $adapter->getAuthUrl() . '">Аутентификация через ' . ucfirst($title) . '</a></p>';
    }
}
?>

</body>
</html>

Итог

Вот и сказочки конец, а кто слушал - молодец! Мы завершили эту непростую серию уроков по аутентификации. Надеюсь, вы опробуете библиотеку SocialAuther, и она поможет вам. В крайнем случае, реализация аутентификации с нуля у вас тоже есть. Выбирайте то, что вам больше подходит.

У меня на этом всё. Удачи вам! И до новых встреч!

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 26 Марта 2013
Просмотров: 189239
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 27 Марта 2013 03:06
    Димка Чуменко
    стоящее)
  • 27 Марта 2013 04:50
    Quber
    Отлично, библиотека которой не хватало! Сколько раз ловил себя на мысли, что на руселлере отличные статьи. Буду использовать библиотеку аутентификации на своих проектах
  • 27 Марта 2013 10:33
    art_gur
    Интересный урок. Спасибо!
  • 27 Марта 2013 10:44
    popropusku
    Супер. Все по теме и доступно. Спасибо. Будем внедрять!
  • 27 Марта 2013 12:04
    Ygreec
    Спасибо, как раз искал для следующего проекта. Все-таки время диктует необходимость такого сервиса. Правда, с первого взгляда - нужно много времени, чтобы разобраться и прикрутить. Но - что делать, будем разбираться. Тем более спасибо, что на буржусайтах такого нет..
  • 27 Марта 2013 14:42
    Angel0s
    Спасибо за полезную серию уроков.
  • 27 Марта 2013 21:44
    Акбар Saydrecks
    Напишите и про вход на сайт через twitter пожаулйста
    • 22 Марта 2014 06:40
      stas.protasevich
      Скоро выйдет данная статья.
  • 28 Марта 2013 20:52
    ulugbek97
    можете написать еще как реализовать систему лайков через соц сети
  • 28 Марта 2013 23:29
    micha
    Пошаговое руководство, доходчиво. Спасибо.
  • 31 Марта 2013 11:09
    efremoz
    Нужная вещь буду пробывать, Благодарю
  • 31 Марта 2013 12:47
    efremoz
    Станислав Протасевич выполнил последовательно все по инструкции, в итоге при Аутентификация пользователя в Контакте выдает такую ошибку: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at X:\home\localhost\www\auth\index.php:2) in X:\home\localhost\www\auth\config.inc.php on line 6 Fatal error: Call to undefined function SocialAuther\Adapter\curl_init() in X:\home\localhost\www\auth\lib\SocialAuther\Adapter\AbstractAdapter.php on line 249
    • 1 Апреля 2013 14:07
      RealVect0r
      вероятно, библиотека CURL не стоит
    • 1 Апреля 2013 15:14
      stas.protasevich
      Добрый день. Вероятнее всего у вас на Денвере в PHP не стоит расширение CURL. Некоторые пользователи уже сталкивались с этой проблемой. Вам нужно: 1. Найти файл dll расширения curl 2. Активировать его в файле php.ini 3. Перезапустить денвер и всё заработает. А вообще, думаю, уже пора потихоньку переходить с денвера на более новые и серьёзные сборки: XAMPP, WAMP, Zend Server. Там таких проблем быть не должно. Просто рекомендация.
    • 1 Апреля 2013 15:16
      stas.protasevich
      если что, пишите мне в ВКонтакте. Разберёмся.
  • 1 Апреля 2013 20:46
    azzido
    Как сменить название на картинку VK
  • 3 Апреля 2013 09:31
    still_alive
    Всё вроде как надо, но после авторизации пустая страница... Что не так?
    • 3 Апреля 2013 12:57
      stas.protasevich
      у вас на локальном сервере включён вывод ошибок?
  • 3 Апреля 2013 13:28
    saffoniy
    Parse error: syntax error, unexpected T_STRING in D:\Webserver\domains\localhost\auth\lib\SocialAuther\Adapter\Vk.php on line 3
    • 3 Апреля 2013 14:55
      stas.protasevich
      какая у вас версия PHP? Библиотека работает с версиями старше PHP 5.3
  • 6 Апреля 2013 22:43
    Arat_Kiev
    На локалке (Mac OS X, MAMP) вроде получает данные из социалки, но не записывает имейл вконтакте в базу (((( Не знаю почему. А тот же код (но с другими параметрами приложения) выбивает ошибку Parse error: syntax error, unexpected T_STRING in /home/arat/mysite.com/mysite/index.php on line 20 А эта строка: $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]); Почему на локалке нормально все, а на хостинге вот такая неприятность?
    • 7 Апреля 2013 08:54
      stas.protasevich
      Arat_Kiev, скорее всего, там где у вас выбивается эта ошибка версия PHP меньше чем PHP 5.3. Проверьте это и отпишитесь пожалуйста.
      • 7 Апреля 2013 12:07
        Arat_Kiev
        Версия была меньше. Поставил 5.4. Та же ошибка ((
      • 7 Апреля 2013 18:47
        Arat_Kiev
        Ошибка ушла, спасибо!
  • 6 Апреля 2013 23:31
    Arat_Kiev
    И еще, не записывает email из Вконтакте в базу :(
    • 7 Апреля 2013 08:51
      stas.protasevich
      Вконтакте скорее всего не даёт email пользователя.
  • 7 Апреля 2013 09:39
    popropusku
    Facebook тормозит с регистрацией а в Одноклассниках уже совсем другая форма для этих манипуляций
    • 7 Апреля 2013 09:57
      stas.protasevich
      поделитесь с нами ссылками, раз так..
      • 7 Апреля 2013 10:46
        popropusku
        Я блин специально там регистрировался. И перейдя по вашим ссылкам не нашел описанных вами интерфейсов. Вы сами то на локалке все это проделывали? В чем дело может быть? Тут у многих проблемы с этом уроком
        • 7 Апреля 2013 10:57
          stas.protasevich
          По каким ссылкам вы не находите что я показывал в скриншотах? Регистрировать приложения нужно в соц сетях. Скрипт тестировался и на локалке и на хостинге. Скорее всего дело в настройках вашего локального сервера.
  • 7 Апреля 2013 10:22
    popropusku
    Warning: Unexpected character in input: '\' (ASCII=92) state=1 in Z:\home\localhost\www\auth\index.php on line 42
    Parse error: syntax error, unexpected T_STRING in Z:\home\localhost\www\auth\index.php on line 42
    
    Такие ошибки при реализации
    • 7 Апреля 2013 10:33
      stas.protasevich
      пишу уже не в первый раз.. внимательно читайте статью. для работы скрипта нужна версия PHP 5.3 и выше. Скорее всего проблема в этом.
      • 7 Апреля 2013 10:44
        popropusku
        Да все с этим в порядке. стоит ==WAMP сервер для localhost (PHP 5.3.13, MySQL 5.1, PostgreSQL 8.4 etc.)== Сборка Денвер
        • 7 Апреля 2013 10:55
          stas.protasevich
          Так WAMP или Denver? Это разные сборки. Скорее дело в настройках Денвера. Попробуйте на виртуалке или на свойм компе поставить WAMP или XAMPP и опробовать скрипт там.
          • 7 Апреля 2013 22:23
            popropusku
            Сборка вот отсюда http://www.denwer.ru/ Вроде все стало отображаться. Текстовые ссылки на входы, но на локальном сервере авторизация получается только через Мэйл. Все остальные выдают ошибки. Вроде все регистрации пошагово выполнял, все по урокам. Можете как-то помочь подробнее (почта, скайп, соцсеть)? У меня все в кое в файле login.php
            • 7 Апреля 2013 22:31
              stas.protasevich
              конечно, давайте попробую вам помочь. Если есть возможность найдите меня в соц сетях: вконтакте, к примеру. Если нет, киньте email, разберёмся.
              • 7 Апреля 2013 22:57
                popropusku
                Я в соц сетях не особо. Лучше по почте. Моя popropusku@gmail.com Спасибо
              • 8 Апреля 2013 20:24
                popropusku
                Спасибо! Все получилось. Только проблема с моей кодировкой cp1251_general_ci осталась. Кракозябли и все((
  • 8 Апреля 2013 21:10
    popropusku
    Было бы неплохо добавить проверку данных пользователя при повторной авторизации. Если пользователь изменил какие-то данные (почту, логин, пол и тд) то чтобы в базе инфа обновлялась
  • 9 Апреля 2013 16:58
    Евгений W
    Спасибо!
  • 9 Апреля 2013 19:16
    azzido
    stas.protasevich у меня вопрос я добавил в базу yandex и google при авторизации показывает пустая страница а при mail vk и Facebook всё работает нормально и второй вопрос как заменить текст mail vk и Facebook на картинку
    • 9 Апреля 2013 19:33
      stas.protasevich
      для замены текста на картинки сначала создайте картинки с названиями (к примеру): "vk-icon.png", "odnoklassniki-icon.png", "mailru-icon.png", "yandex-icon.png", "google-icon.png", "facebook-icon.png": при выводе ссылки немного измените код:
      echo '<p><a href="' . $adapter->getAuthUrl() . '"><img src="' . $title . '-icon.png" /></a></p>';
      
      Как-то так.. Почему в некоторых случаях у вас выходит пустая страница, сходу сказать не могу. Надо разбираться. Может неверно что-то в настройках приложений неверно сконфигурировано.. Нужно разбираться. Свяжитесь со мной через соц сети. Попробуем разобраться.
  • 12 Апреля 2013 00:42
    popropusku
    Скажите, вот если допустим, пользователь вошел к нам первый раз. Он заносится в БД. А, допустим, аватарки на данный момеент нет. У нас она не заносится в БД. Потом он ее устанавливает. Но в нашу БД она не попадает? Нет возможности при входе обновлять инфо в нашей БД?
    • 12 Апреля 2013 10:05
      stas.protasevich
      есть конечно. При аутентификации тогда нужно извлечь все поля о пользователе из БД и проверить на равенство с теми, что пришли из социалки. Если есть различие выполнить UPDATE запрос.
      • 12 Апреля 2013 11:44
        popropusku
        Наверно будет нахальством попросить код? если возможно
        • 12 Апреля 2013 14:20
          stas.protasevich
          ок) обновлю статейку сегодня или завтра.
          • 12 Апреля 2013 14:31
            popropusku
            Очень буду ждать появления. Чиркните плиз где нить что статья исправлена. чтобы понять что материал обновлен. Спасибо! Очень мне помогли с Аутентификацией и материалом. Спасибо.
            • 13 Апреля 2013 13:50
              iammaster
              Да, с нетерпением ждём обновлений!
            • 13 Апреля 2013 13:53
              stas.protasevich
              Здравствуйте. Обновил и дополнил статью, а так же исходники. Так же прошу обратить внимание, что в вашем случае (с использованием кодировки cp1251) в файле index.php на строках номер 84-91 нужно будет применить запись преобразования кодировки. iconv("utf-8", "windows-1251", ...)
              • 13 Апреля 2013 15:49
                popropusku
                Спасибо. Занимаюсь этим. А строки 73 - 80 нужно перекодировать? А будет ли Твиттер включен когда-нибудь в урок?
                • 13 Апреля 2013 16:19
                  stas.protasevich
                  В строках 73 - 80 мы работаем с данными из БД. Они по идее уже в нужной кодировке. Твиттер изначально не планировался из-за того что они используют старый OAuth 1.0, в то как все новые OAuth 2.0. Я хотел подождать пока они перейдут на новую систему.. но по многочисленным просьбам пользователей всё чаще задумываюсь о том чтобы подключить его в текущем состоянии. Только не знаю когда... Об этом сообщу отдельной статьёй.
  • 17 Апреля 2013 18:13
    shamko.denis
    запускаю, ошибка Unexpected character in input: '\' (ASCII=92) state=1 на 47 строке index.php
    $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);
    • 17 Апреля 2013 18:24
      stas.protasevich
      какая у вас версия php? нужна >= PHP 5.3
      • 17 Апреля 2013 18:29
        shamko.denis
        сори, только хотел попросить прощение за мою невнимательность.
  • 17 Апреля 2013 19:49
    igontarev
    классно, уже опробовал! не понятно откуда взялись эти данные..., заходил в ВК и там был только скрипт на JS
  • 28 Апреля 2013 14:41
    igontarev
    отличная библиотека, все работает, спасибо!
  • 28 Апреля 2013 21:23
    vitauth
    Здравствуйте! Вы можете, пожалуйста, сказать как расширить класс Vk? Например, я хочу получить страну пользователя или его друзей. Но для этого нужно совершить ещё один запрос к API.
    • 28 Апреля 2013 21:34
      stas.protasevich
      Здравствуйте. Если знакомы с Vk API и ООП, то всё будет просто. Измените существующий класс или наследуйте от класса Vk, расширяя своими методами
      • 28 Апреля 2013 21:41
        vitauth
        С VK API знаком, а вот с ООП не очень. Если бы Вы могли мне немного подсказать.
  • 28 Апреля 2013 21:47
    igontarev
    жалко твиттера нет, его полного комплекта не хватает
  • 4 Мая 2013 19:58
    AndreyLopushansky
    Скажите пожалуйста это что для каждого пользователя будут разные записи в базе одна для Гугл другая для Контактов третья для фейсбука? ведь везде Social_ID разный получаем. Как же тогда сосредоточить информацию по одному пользователю в его личном кабинете если он с разных соцсетей будет заходить. И еще один вопрос а Контакты имэйлом не деляться с нами?
    • 4 Мая 2013 20:39
      stas.protasevich
      1. Да, если один и тот же пользователь зашёл из разных социалок, то в базе будет несколько записей. Для того. 2. Чтобы он мог объединить свои записи, нужно писать дополнительный функционал. 3. Если вы email не получаете, то либо социалка не даёт, либо у пользователя он не введён
      • 4 Мая 2013 20:53
        AndreyLopushansky
        А как хотябы внести такие изменения в ваш код, которые позволят отслеживать есть ли уже такой имаил который передает очередная социалка и в таком случае просто обновлять информацию о пользователе а не создавать новую запись в базе?
        • 5 Мая 2013 09:10
          stas.protasevich
          библиотека данную возможность не влючает. Это нужно обдумать. Свяжитесь со мной в одной из соц сетей.
  • 14 Мая 2013 15:30
    popropusku
    А как сделать чтобы аватарка из Одноклассников отображалась, а не заставка что фото на страничке пользователя?
    • 14 Мая 2013 15:36
      stas.protasevich
      Если фотографии от одноклассников не видно, это дело скорее всего в их сервисе.
  • 24 Мая 2013 13:14
    popropusku
    Станислав, а вы не могли бы помочь с кодом в файле login.php (ну или index.php), решил все перевести на MySQLi. По сайту все вроде бы получилось а с этим файлом проблема. Там где запросы на извлечение, вставку и обновление информации в БД. Спасибо.
    • 24 Мая 2013 13:39
      stas.protasevich
      Здравствуйте! Я вам помогу, но советую дождаться следующей недели. В следующем видео я покажу альтернативу MySQLi, на мой взгляд лучше и когда вы уже решите что использовать, я помогу вам с возникшими сложностями, ок?
      • 24 Мая 2013 13:41
        popropusku
        Договорились. Спасибо.
  • 10 Июня 2013 20:24
    Андрей Лопушанский
    Я поставил все в корень сайта записываю в настройках 'redirect_uri' => 'http://'.$_SERVER['SERVER_NAME'].'/index.php/?provider=vk'так же в настройке ВК записываю Адрес сайта: http://mobilauto.net/index.php/?provider=vk и у меня ошибка прихотит из ВК {"error":"invalid_request","error_description":"redirect_uri has wrong domain, check application settings"}, напишите пожалуйста мне в скайп imediasun или на мыло imediasun@gmail.com очень нужно установить єтот ваш модуль, я весь интернет переріл только ваш подходит под мой проект, для вк отдельно установил для гугла не получилось пока, а вот библиотека вообще не ставится, заранее большое спасибо вам за єту библиотеку, а в случае гугла приходит вот такое сообщение после того как я даю разрешение использовать свой профиль : На веб-сайте произошла ошибка при получении http://mobilauto.net/index.php?provider=google&code=4/KT4ISP6Cucwg4pkrqvVt4XrWgnLl.8oNOo8E908oWOl05ti8ZT3bhU8FefgI. Веб-сайт может быть закрыт на обслуживание или настроен неправильно.
  • 23 Июля 2013 19:06
    post.zoolog
    Отличный урок! Спасибо!
  • 6 Августа 2013 05:45
    Снежана Ворлова
    А нельзя мануал, как сделать коментарии как у Евгения на сайте через соц сети.
    • 11 Января 2014 20:39
      spopov79
      присоединяюсь к вопросу
  • 21 Октября 2013 06:35
    britten
    Попробовал протестить ваш код взятый с GitHub'а с несколькими социальными сетями. Все работает, но при авторизации через "В контакте" не возвращается E-mail
  • 6 Ноября 2013 19:09
    OlegOleg1980
    Ветка еще поддерживается??? Есть вопрос к автору - как можно передать дополнительный параметр в адресной строке кроме "provider" и "code"? Пробую разные варианты, но он либо где то съедается, либо заменяет параметр "provider"... Нужно чтобы при нажатии на ссылку авторизации формировалась конечная ссылка типа
    http://mysite.ru/start?provider=mailru&code=b04ee50e7b8fklg68d9889c6c787dae3&param=1354
    а сейчас
    http://mysite.ru/start?provider=mailru&code=b04ee50e7b8fklg68d9889c6c787dae3
  • 8 Ноября 2013 18:20
    diaska
    Спасибо) Но подскажите можно так подключить вход к сайту который сделан на wordpress ?
  • 29 Ноября 2013 04:24
    Sun30
    Кто поможет..Как сделать чтобы при входе в базу добавлялся логин и пароль.Либо как прикрутить имя к login.
    • 29 Ноября 2013 09:57
      stas.protasevich
      49-109 строчки - внесение пользователя/извлечение данных о существующем пользователе
  • 17 Декабря 2013 22:41
    Павел Московских
    Я снова в щенячем восторге от статьи на этом ресурсе. Все что тут читаю полезно, доходчиво, качественно. Как выйдет новый курс "Все Технические Моменты Онлайн Бизнеса в Видеоформате 2 или PHP+MySQL для начинающих" так куплю себе. И полезно мне и в поддержку этого ресурса. ;)
  • 4 Января 2014 13:47
    Zh_Roman
    а будет мануал по твитеру?
  • 10 Января 2014 01:29
    Павел Московских
    Все хорошо. Но при авторизации через файсбук, возвращает на главную с такими вот параметрами "/index.php#_=_" Вот это "#_=_" что такое?! Как это убрать? Не могу найти. Уже весь код облазил. Может плохо лазил, но подскажите. ;)
  • 2 Февраля 2014 09:55
    asminin.sergey
    Здравствуйте! А можно как-то сделать так, чтобы пользователь не выходил, допустим месяц? Или чтобы вообще никогда не выходил, пока не нажмет кнопку "выход" Спасибо!
    • 5 Февраля 2014 22:59
      stas.protasevich
      Если вы просто хотите держать узера залоганым после закрытия браузера, то нет проблем. А вот если вы хотите ещё при этом забирать с соц сети какую-то инфу (обращаться к API соц сети за инфой), то вы этого сделать не сможете из-за просроченного token-а (жизнь которого колеблится в пределе пары часов). Чтобы обновить токен, пользователю придётся ещё раз зайти через соцсеть на ваш сайт.
  • 16 Февраля 2014 19:29
    popropusku
    Добрый день! Появилась такая проблема: при выходе появляется надпись
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\localhost\www\site\logout.php:1) in Z:\home\localhost\www\site\logout.php on line 5
    Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\site\logout.php:1) in Z:\home\localhost\www\site\logout.php on line 6
    
    а вот код файла
    <?php
    unset($_SESSION['user']);
    session_start();
    header('location:login.php');
    
  • 17 Февраля 2014 13:41
    popropusku
    Подскажите, как сделать чтобы при успешном входе переадресация шла на страничку, на которой был пользователь до этого?
    • 18 Февраля 2014 22:20
      stas.protasevich
      Сохранять в сессию откуда пользователь пришёл с помощью $_SERVER['HTTP_REFERER'] и потом забрать это значение из сессии и перенаправить туда куда надо.
      • 19 Февраля 2014 15:39
        popropusku
        А можете на примере показать? Был бы благодарен.
        • 24 Февраля 2014 18:21
          stas.protasevich
          напишите мне на почту, и разберёмся с этой задачей
          • 25 Февраля 2014 22:49
            popropusku
            Спасибо. Написал Вам на почту.
  • 18 Февраля 2014 15:30
    capocek_ru
    Не подскажите почему facebook не отдает ссылку на аватар ... В базе данных пустое поле, все остальные значения получает исправно ! Пробовал с разных аккаунтов и тоже самое ...
    • 18 Февраля 2014 15:52
      Вадюха Саросек
      А все, вопрос решил, нашел косячок, в файле facebook.php вместо userInfo['name'] должно быть userInfo['id'] ...
      • 13 Января 2015 19:20
        vanya_tsyntaru
        Спасибо! Помог, я уже думал что косяк в настройках на фейсбуке.
  • 23 Февраля 2014 20:56
    Юлия Ригерт
    Подскажите как изменять размеры аватара полученного по ссылке из аккаунта юзера в нужные размеры не сохраняя на сервере ? А то если просто сжимать указывая размеры ширину и высоту то изображения сильно искажаются ... Особенно те кто из контакта, там они высокие прямоугольные а у меня на сайте квадратные и сильно искаженные из за этого ((
  • 28 Февраля 2014 00:01
    all.rous.1
    что у вас за плагин комментариев? самописный?
  • 6 Марта 2014 22:13
    Джонни Депп
    Подскажите как сделать редирект с auth не на index.php а на ту страницу где пользователь авторизовался ! Если подставлять рефер предыдущей страницы, то он перенаправляет на предыдущую, т.е. на страницу запроса прав прилажения соц сети, короче говоря ошибка получается ...
    • 8 Марта 2014 10:24
      stas.protasevich
      При приходе на auth записывайте значение рефера в сессию, по окончанию аутентификации доставайте это значение и перенаправляйте куда нужно.
  • 22 Марта 2014 01:01
    Southerner
    Спасибо автору за труды! Если будет время - добавьте в библиотеку еще и авторизацию через твиттер, пожалуйста)
  • 23 Марта 2014 13:15
    makord85
    Подскажите пожалуйста, при нажатии на ссылку открывается окошко и обрабатывается запрос, а как сделать что бы после обработка запроса окно закрылось и текущая страница обновилась? Пример как здесь авторизация через соц сети.
  • 6 Апреля 2014 03:04
    solitario84
    так сложилось,что в php ,я полный ноль..не поленитесь,подскажите,как сие творение подключать к CMS?
    • 6 Апреля 2014 12:02
      stas.protasevich
      Никак. Нужно оформлять как плагин. Уверен что уже есть готовые решения
      • 22 Мая 2014 17:10
        Jurij Zajac
        Отличная статья и плагин, спасибо. Попутно разбираясь в коде начал изучение ООП, обычно писал процедурами. Поскольку я новичок в ООП, возможно поможете советом. Есть желание дописать данный плагин, расширить поддержку функционала API соцсетей, добавить к примеру получение списка друзей, отправка сообщений и т.д. То есть, это будет уже плагин не только авторизации. И как мне кажется будет удобно использовать данную (Вашу) структуру Классов/Адаптеров добавляя в каждый соответствующий код/функции. Или может есть смысл переписать всё с нуля скажем в структуре CMS. Не силён в терминах ООП, надеюсь не слишком сумбурно пишу.
        • 23 Мая 2014 12:41
          stas.protasevich
          Думаю принцип адаптеров - самое лучшее что можно предложить в данном случае. Конечно, можете форкнуть проект на Github и расширять как вам вздумается. Буду рад, если мой труд окажется Вам полезным и с удовольствием взгляну на то, что получилось.
          • 23 Мая 2014 15:54
            Jurij Zajac
            Самому интересно что из этого получится. Такой ламерский вопрос... Если скажем буду делать, что то вроде кабинета (к примеру cabinet.php) я так понимаю адаптеры надо заново подключать по принципу как в index.php (строчки 003-047) или есть вариант как их подключить единожды и потом использовать на всех страницах до закрытия сессии?
            • 26 Мая 2014 10:49
              stas.protasevich
              Подгрузку библиотеке можно осуществить в одном файле: к примеру, config.php и подключать этот файл всюду где нужно (в других файлах)
              • 29 Мая 2014 12:38
                Jurij Zajac
                кажется ошибка в файле facebook.php, в function getAvatar() должно быть
                userInfo['id']
                вместо
                userInfo['username']
  • 6 Апреля 2014 13:22
    Денис Васильев
    А можно twitter отдельно выложить?
    • 6 Апреля 2014 17:57
      stas.protasevich
      Да, скоро будет и Twitter
  • 8 Апреля 2014 20:26
    Олеся Хахулина
    спасибо
  • 17 Мая 2014 15:59
    Владислав Царевич
    Скачал исходники и залил на сервер. При попытке авторизироваться с помощь ВК была выведена следующая надпись:
    {"error":"invalid_client","error_description":"client_id is incorrect"}
    Что делать?
    • 18 Мая 2014 09:42
      stas.protasevich
      читайте описание ошибки: "error_description":"client_id is incorrect" client_id указан неверно. Вы должны создать приложение в вк. Вам будет выдан client_id, который вы должны прописать в php коде.
  • 27 Июня 2014 14:44
    godscreature
    Хорошая библиотека. Только, например, я массив с настройками в отдельный файл config.php вынес. И еще, мне кажется, существенно живучести добавит библиотеке, если допишете 2 метода в AbstractAdapter: post и get не через cURL. А то хоть у меня и стоит cURL, но не поддерживается https протокол. В итоге я сам себе 2 этих метода дописал и нормально все зашуршало. Те что были переименовал в post_curl и get_curl, а новые два назвал post и get ну и в итоге ничего нигде менять не потребовалось. Вот эти 2 метода, может поможет кому-то:
    protected function post($url, $params, $parse = true){ $data_str=urldecode(http_build_query($params)); $options = array( 'http' => array( 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n"."Content-Length: ".strlen($data_str)."\r\n", 'content' => $data_str ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if($parse){ $result = json_decode($result,true); } return $result;
    }
    
    protected function get($url, $params, $parse = true){ $result = file_get_contents($url.'?'.urldecode(http_build_query($params))); if ($parse) { $result = json_decode($result, true); } return $result;
    }
    
  • 28 Июня 2014 16:07
    godscreature
    Я на рабочем сайте делал. Все нормально шуршит. Ну поднастроил чуток урлы.
  • 24 Сентября 2014 15:47
    Dимон
    Все гут, только при авторизации через ЛК проблема с емайлом. Надо сначала передать серверу vk запрос права использовать емайл пользователя, а потом при ответе сервера с токеном - сразу же записать полученный емайл в инфо о пользователе. Типа того: if (isset($tokenInfo['email'])) $this->userInfo['email'] = $tokenInfo['email']; И еще проблема с автолодом. Если использовать на сайте с cms - то происходит неприятная ситуация, когда Ваш автолод берет на себя все функции по загрузке классов. Было бы неплохо сделать еще альтернативный файлик, где просто подключаются все необходимые классы.
  • 21 Октября 2014 00:41
    cloudopia
    Пытаюсь прикрутить библиотеку для авторизации на создаваемом в настоящее время разделе сайта http://cloudopia.ru/clouds, однако для facebook выдает такую ошибку: Your app may break after 30 апреля 2015 г. Вероятно, что-то на facebook изменили с авторизацией. Нет ли более новой версии библиотеки? Спасибо.
  • 23 Ноября 2014 10:37
    Павел Мазалин
    Вы так все умно рассказали, но а вы можете собрать сборку мода для phpBB2?? Такого мода нигде нет. Сделайте благое дело для владельцев phpBB2 Я бы хотел поставить такой мод к себе на http://forumroditeley.ru
  • 3 Декабря 2014 12:09
    best.of_the_best
    Господа, если в файле VK.php изменить [CODE]'scope'=> 'notify',[/CODE] на [CODE]'scope' => 'email,notify',[/CODE] то запрос на получение майл адреса к ВК уйдет и он его, судя по всему даже отдаст. но скрипт все равно его не обрабатывает((( Почему? кто знает? остальные соц. сети email отдают нормально
    • 3 Декабря 2014 20:53
      stas.protasevich
      Потому что в коде библиотеки данное поле не обрабатывается. Нужно дописывать библиотеку
      • 3 Декабря 2014 23:30
        best.of_the_best
        а где и хотя бы примерное направление? не подскажите? или может по аналогии с чем то сделать, с какой то функцией. просто, 'email'=>'email' в $this->socialFieldsMap = array( задается и функция то getEmail() есть
  • 4 Декабря 2014 16:00
    best.of_the_best
    Для получается email (майл, мэйл) адреса из Вк нужно в lib/SocialAuther/Adapter/Vk.php а)
    'scope'=> 'notify',
    заменить на
    'scope'=> 'notify,email',
    б) находим
    $this->userInfo = $userInfo['response'][0];
    ПОСЛЕ НЕГО ВСТАВЛЯЕМ
    $this->userInfo['email'] = $tokenInfo['email'];
    в)зарегистрировать приложение в Вк как САЙТ, так как в API четко прописано, что майл адрес отдается только сайтам https://vk.com/dev/permissions г)танцуем и радуемся P.S спасибо stas.protasevich за подсказку
  • 20 Марта 2015 23:16
    Sergey_net_it
    А подходит ли эта библиотека для регистрации через социальные сети, а не только для аутентификации. На многих сайтах встречал вход на сайт с помощью социальных сетей и регистрация тоже с использованием социальных сетей?
    • 4 Мая 2015 17:12
      stas.protasevich
      Да, её можно использовать и для регистрации
  • 9 Мая 2015 20:42
    CoMMoN
    Я не понял где взять эти ид_клиент и т.п? я хотел просто сделать авторизацию через соц.сеть а при попытке войти пишет типа нет ид_клиента :(
  • 10 Мая 2015 19:39
    CoMMoN
    У меня не работает, вообще, пишет еррор нет ида и прочего, вы бы рассказали где их брать или может я не понял чего то :(
    • 15 Мая 2015 23:31
      sa4ek
      Почитайте статью по поводу регистрации в каждой из интересной вам соц.сети, там описан процесс получения и настройки standalone-приложений (по крайней мере в вк они именно так называются), проверьте пароли к базе данных, создали ли вы ее вообще, проверьте прочие настройки (настройки редиректов, ид приложений)
  • 15 Мая 2015 00:53
    sa4ek
    Я пытаюсь объединить классическую авторизацию, с авторизацией через соцсети, все вроде бы работает, кроме логаута стоит смотреть документы index.php - как раз страница аворизации info.php - по идее на нее потом редирект access_user_class.php - класс отвечающий за авторизацию PHP только начал изучать, сам пишу на java и с++)) Поэтому буду рад помощи со стороны более опытных товарищей. https://github.com/sa4ek/cerber
  • 21 Мая 2015 15:04
    Maxme Zaitsev
    Возможно тупой вопрос), но: У меня не прогружается аватар при авторизации через FB, как писалось выше возможно нужно поставить вместо userInfo['username'] ставить userInfo['id'], но все равно в базу не попадает ссылка на картинку! Подскажите как это исправить?
  • 21 Мая 2015 19:00
    Maxme Zaitsev
    Ответьте пожалуйста на мой комментарий выше по поводу аватара в ФБ!
  • 28 Июля 2015 21:59
    Чернышёв Александр
    Как оставаться на той же страницы, без ее перезагрузки? Например в корзине, когда уже часть формы заполнена клиентом, затем он нажимает на иконку ФБ, чтобы авторизоваться.
  • 30 Июля 2015 11:45
    Чернышёв Александр
    Каким способом можно сделать авторизацию без перезагрузки страницы? Например в корзине, когда клиент уже заполнил часть полей, затем нажимает на авторизацию через фб.
  • 6 Августа 2015 22:05
    danilgorda
    Не срабатывает функция authenticate, сразу перебрасывает на страницу index.php Получаю такую ссылку - http://localhost/index.php?provider=vk&code=77d8bd2342dbca38ba7 В чем может быть проблема?..
  • 10 Августа 2015 13:45
    Чернышёв Александр
    Как оставаться на той же страницы, без ее перезагрузки? Например в корзине, когда уже часть формы заполнена клиентом, затем он нажимает на иконку ФБ, чтобы авторизоваться.
  • 18 Августа 2015 15:14
    pokabudki
    Как оставаться на той же страницы, без ее перезагрузки? Например в корзине, когда уже часть формы заполнена клиентом, затем он нажимает на иконку соцсети, чтобы авторизоваться. Пример: http://demos.w3lessons.info/facebook-oauth2-login/ Описание примера: http://w3lessons.info/2015/04/19/facebook-oauth-2-0-login-without-page-refresh-using-jquery-php-mysql/
  • 20 Сентября 2015 15:40
    Александр Безруков
    Помогите реализовать на UMI.CMS Готов заплатить!
  • 30 Сентября 2015 03:38
    driver86
    инфы по твиттеру не хватает
  • 30 Сентября 2015 03:40
    driver86
    а где твиттер?
  • 20 Ноября 2015 10:54
    kovalsky
    Можно ли как то получать телефон юзверя?
  • 20 Ноября 2015 11:31
    kovalsky
    Для Вк есть прописать запрос города, то возвращает id города, а не название его. как то можно поменять?
  • 24 Декабря 2015 00:03
    chebak_off
    Красавчик!!! Все ясно и понятно! Спасибо, мэн!
  • 8 Января 2016 12:26
    uas80
    Всем привет, с Новым годом и Рождеством Есть опыт работы кода в OPENCART 2?
  • 8 Января 2016 20:39
    CoMMoN
    Все сделал по феншую , пытаюсь авторизоваться через соц.сеть вк.ком и ощущение что страница просто обновляется и все, я не авторизовываюсь и в базу ни чего не записуется.
  • 4 Марта 2016 10:46
    Привет! ВК не желает регистрировать обратный урл с параметрами, т.е. параметр ?provider=vk не канает, как быть?
  • 18 Апреля 2016 20:43
    Азат Сейдахмет
    Доброго времени суток, Станислав! У меня почему то не срабатывает $auther->authenticate() в этом месте!
    if ($auther->authenticate()) { $auther->getProvider(); $auther->getSocialId(); $auther->getName(); $auther->getEmail(); $auther->getSocialPage(); $auther->getSex(); $auther->getBirthday(); $auther->getAvatar();
    }
    
    Авторизация через ВК! Приложение есть! Айди и Секрет вбиты. Все должно работать, но во время отладки заметил, что функция не срабатывает! Не подскажете в чем тут дело?
  • 22 Мая 2016 12:26
    adv53
    спасибо. под делу и без воды!
  • 26 Августа 2016 20:08
    Светлана Катявина
    Спасибо за урок, как раз то что мне нужно)
  • 29 Октября 2016 12:50
    Сергей Ефремов
    СУПЕР РЕАЛЬНЫЙ ЗАРАБОТОК основанный на взаимопомощи !!! Наткнулся я на это совершенно случайно, когда искал работу для дополнительного заработка. До этого, я такие статьи даже не дочитывал до конца. В статье говорилось, что «МОЖНО СДЕЛАТЬ СОТНИ ТЫСЯЧ РУБЛЕЙ ЗА ПАРУ НЕДЕЛЬ ПРИ ВЛОЖЕНИИ ВСЕГО В 700 РУБ.» Я подумал, что это должно быть очередной развод для лохов, но решил всё-таки один раз дочитать до конца и узнать, что же конректного всё-таки там предлагают. В статье говорилось о том, что надо послать по 100 рублей на 7 Internet-кошельков и перечислялись эти кошельки. Потом надо вычеркнуть первый кошелёк из списка, тем самым, сместив список на одну строчку вверх. В результате чего седьмая строчка освобождается, куда Вы вписываете номер своего Internet-кошелька. Затем Вы закидываете данное сообщение, но уже с ВАШИМИ ДАННЫМИ на седьмой строчке, на 200 разных форумов. Я поразмышлял и подумал, что в принципе НИЧЕГО НЕ ТЕРЯЮ кроме 700 руб. В общем, сумма небольшая, а риск – дело благородное. И я решил попробовать. Установил Интернет-кошелёк, перечислил всем участникам акции по 100 руб. и начал рассылать эти объявления по разным форумам и доскам объявлений. В течение 2-х дней я зарегистрировался на более чем 100 бизнес-форумах и бесплатных досках объявлений. Прошла неделя, заглядываю в свой Интернет кошелек, и угадайте ЧТО? Поступлений никаких нет. Вообще. А разные участники пишут, что за неделю заработали кто по 3000 руб., кто по 4600 руб. Ну что ж, подумал я, попал в очередной лохотрон, желая заработать за пару недель десятки тысяч рублей. Ну и бросил это занятие, так и не дослав свое объявление до 200 форумов. Ещё через неделю (ради любопытства) заглянул в свой Интернет кошелек. Смотрю, всего одно поступление - 100 руб. Да, думаю, дело не стоящее, случайно нашёлся такой же наивный, как и я. Ещё через две недели я все-таки снова открыл свой Интернет кошелек, а в нем уже около 4000 руб. Откуда? Непонятная картина, но всё равно за 1 месяц 4000 руб. Это очень мало, как пишут предыдущие участники - они за 1 месяц заработали десятки тысяч рублей. И вот, после 1 месяца началось самое интересное: на мой кошелёк стали приходить деньги КАЖДЫЙ ДЕНЬ, затем, спустя ещё 2 недели, на моем счету было уже более 48 000 руб. После этого я отправил свои объявления ещё примерно на 150 форумов. РЕЗУЛЬТАТ МЕНЯ ОШЕЛОМИЛ. По прошествии всего 2 месяцев, я получил 141 000 руб. И деньги шли каждый день. Каждые 10 минут на мой счёт поступали и поступают сейчас по 100-400 руб., так как я стабильно размещаю в день это сообщение на 10 форумах (это примерно 45 минут моего времени в день). И это все пришло ко мне за риск в 700 руб., неплохо, правда?) Я был в очень плохом экономическом положении и долго не мог найти себе подходящую работу до того, как наткнулся на эту статью. Я не особо верил, что это работает, но всё же рискнул и начал получать переводы со всего света… Я купил многое из того, что мне было нужно… И это очень кстати, согласитесь? Моя работа теперь - это каждый день по часу в Интернете и ВСЁ!!!! А заработок весьма солидный! Я понял одну вещь: всегда найдутся люди, которые будут убеждать себя и других, что всё это лишь развод для лохов. Но на самом деле причина в них самих – они просто не могут (или не хотят) разместить данное сообщение на 200 форумах. И они будут убеждать всех во всемирном заговоре, но только не в собственной лени. Я Вам хочу рассказать, как это работает, и почему это работает. Я даю вам честное слово, что если вы будете В ТОЧНОСТИ соблюдать ниже перечисленные инструкции, то вы начнете получать НАМНОГО БОЛЬШЕ ДЕНЕГ, чем Вы думали, потратив всего небольшую сумму и несколько часов свободного времени. Согласитесь, это очень просто. ЭТО СОВЕРШЕННО ЛЕГАЛЬНО. И ВАШ ВКЛАД СОСТАВЛЯЕТ ВСЕГО 700 РУБЛЕЙ... Самое ВАЖНОЕ, ЭТО РАБОТАЕТ, И ПРИ ЭТОМ ВЫ НИЧЕМ НЕ РИСКУЕТЕ. Прочтите это НЕСКОЛЬКО РАЗ, если вам это требуется. А дальше, следуйте инструкциям в ТОЧНОСТИ, как они написаны и в течении ближайших 2 месяцев вы разбогатеете на очень приличную сумму денег. Это не вранье!!! Даю вам честное слово! Попробуйте и сами все увидите. Вот, собственно и сама инструкция: 1. Зарегистрируйтесь в системе «Яндекс мани (Яндекс Деньги)». Это некий электронный кошелёк для использования денег в сети Интернет. Ознакомьтесь с данной системой, как она работает. Далее необходимо положить на свой счет 710 руб. (больше на 10 рублей, чем требуется, потому что при осуществлении перевода система снимает 0.5% переводимой суммы, т.е. Вы должны будете переводить по 100 руб. без учета комиссии) От себя отмечу, что можно пополнить электронный кошелек в специальных автоматах по приему платежей, которые часто располагаются в магазинах и на станциях метро. В салонах связи «Евросеть», «Связной» и т.д. Лучший вариант – это, конечно, привязать к своему счету в «Яндекс Деньги» любую свою банковскую карту (можно кредитную). Как только Вы положите на свой кошелек 710 руб. - все готово, вы можете переходить к следующему шагу! 2. Необходимо перевести по 100 руб. с учетом комиссии ( снимается службой перевода за совершение операции) на 7 предлагаемых ниже счетов яндекс-денег. Для того чтобы осуществить перевод, необходимо зайти на сайт яндекс деньги. Затем, если вы еще не вошли под своим именем, нажмите на ссылку «Войти…», которая располагается в самом верху страницы и выделена красным шрифтом. Далее вам предложат ввести логин и пароль, которые вы получили при регистрации. Затем находим ссылку «Перевести». Здесь, как раз и нужно будет перевести с вашего яндекс-кошелька по 100 руб., на 7 указанных кошельков. Важно! Перевод нужно осуществлять на счет, а не на e-mail !! Важно! При каждом отправлении указывайте в поле «Название платежа» следующую фразу: «Пожалуйста, внесите меня в список яндекс-кошельков». Чтобы получать доход, необходимо отправить на каждый из этих 7 кошельков по 100 руб., иначе вы просто не будете включены в систему сетевыми модераторами яндекс-кошельков и не сможете обналичить доход. (100 руб. с учетом комиссии - это отправляемая Вами сумма, при этом получатель получает ровно 100 руб.) ВАЖНО!!! Во время отправки денег получателяем не в коем случае НЕЛЬЗЯ ставить галочку - "защитить кодом протекции", потому что если вы так сделаете никто из участников акции денег не получит и ваши деньги вернуться вам обратно в кошелек, а значит вы перестанете быть участником акции в системе Яндекс. Итак, отправьте по 100 руб. на каждый из следующих счетов: 1 —41001478037034 2 — 41001485230090 3 —41001485274208 4 —41001798274147 5 —410012059176265 6 —410012055531981 7—410012494867850 ПОВТОРЯЮ, чтобы получать доход, необходимо отправить НА КАЖДЫЙ из этих 7 кошельков по 100 руб. - иначе, сетевыми модераторами яндекс -кошельков, вы просто не будете включены в систему и не сможете обналичить доход. 3. Теперь ВНИМАНИЕ!!! После того, как Вы выполнили ШАГ 2, скопируйте к себе на компьютер весь этот текст от начала до конца. В скопированной статье удалите из списка кошельков ПЕРВЫЙ (ВЕРХНИЙ) кошелёк и переместите 2-ой кошелёк на место 1-го, который Вы стёрли, 3-ий - на место 2-го, 4-ый - на место 3-го, 5-ый - на место 4-го, 6-ой - на место 5-го и 7-ой - на место 6-го ! А в 7-ой номер, который оказался пустым, ВПИШИТЕ НОМЕР Вашего КОШЕЛЬКА!!! Разместите эту статью (или объявление с ссылкой на страницу, которую Вы без труда можете сделать на одном из бесплатных сайтов) – на, НЕ МЕНЕЕ ЧЕМ 200-300 ФОРУМАХ (за любой отрезок времени, хоть за месяц, хоть за полгода, хоть за пару дней) и НОВОСТНЫХ ЛЕНТАХ. ЗАПОМНИТЕ! ЧЕМ БОЛЬШЕ Вы разместите объявлений, ТЕМ ВЫШЕ БУДЕТ ВАШ ДОХОД. И этот доход будет НАПРЯМУЮ ЗАВИСЕТЬ ОТ ВАС. Размещение этой статьи на 200 форумах, даже на самых малопосещаемых, ГАРАНТИРУЕТ Вам доход 150 000 руб - ЭТО МИНИМУМ!!!, в течение двух месяцев!!! БОЛЬШЕ РАЗМЕЩЕНИЙ - БОЛЬШЕ ДОХОД (при том в ГЕОМЕТРИЧЕСКОЙ ПРОГРЕССИИ). ИТАК, КОГДА ВЫ ДОСТИГНЕТЕ ПЕРВОЙ ПОЗИЦИИ В СПИСКЕ, ВЫ БУДЕТЕ ИМЕТЬ ТЫСЯЧИ РУБЛЕЙ ПРОСТО КАК СОЗДАТЕЛЬ СПИСКА!!! Я думаю, ЭТО стоит 700 рублей и СОВСЕМ НЕ ТРУДНОЙ РАБОТЫ. А теперь, с помощью ПРОСТЕЙШЕЙ МАТЕМАТИКИ, я Вам объясню, почему Вы в любом случае ничего не теряете, а ТОЛЬКО ВЫИГРЫВАЕТЕ. Скажем, из 200 размещений вы получите только 5 ответов (очень низкая цифра). Значит, вы сделаете 500 рублей, находясь на 7 позиции в списке. Теперь эти 5 людей делают опять же МИНИМУМ 200 размещений с вашим кошельком на 6 позиции, и только 5 людей отвечают тем первым 5 - это уже 2500 рублей. Дальше эти 25 людей делают по 200 размещений с вашим кошельком на 5 строчке и только 5 отвечают – ваш доход 12500 рублей. Теперь эти 125 людей, разместив и получив только по 5 ответов, дают вам 62 500 рублей прибыли (вы на 4 позиции). Далее, эти 625 людей делают по минимум 200 размещений с вами уже на 3 строчке и только 5 людей отвечают - это 312 500 рублей. Самое интересное то, что эти 3 125 людей сделают еще по 200 размещений, и если им ответят только 5 людей, ваш доход составит 1 562 500 рублей (вы на 2 позиции). Теперь ВНИМАНИЕ, эти 15 625 людей сделают еще по 200 размещений, и если им отвечают только 5 человек - это 7 812 500 рублей!!! Не правда ли внушительная цифра? Вы только вдумайтесь!! Так вы сможете заработать свои первые 7 миллионов!! И это всё за первоначальный вклад в 700 рублей!!! Вы себе можете представить, что тысячи людей со всего мира присоединяются к Интернету и читают эти статьи каждый день. Так же как и вы сейчас читаете эту!!! Так что!? Потратите ли Вы 700 рублей? А если им будут отвечать не по 5 человек, а по 10? 20? Представляете, в какой геометрической прогрессии будет расти ваш доход???!! P.S: Маленькое лирическое отступление. Однажды я понял, в чем именно была причина моего недоверия к данной системе. Разве можно обычному человеку даже представить себе, что в наше катастрофически трудное время для поисков заработка можно заработать столько денег практически просто так, из ничего? Наверняка и Вас мучает такой вопрос сейчас. Уверяю вас: всё работает лучше чем часы. Простой математический расчёт и немного труда. Вот и весь рецепт успеха. И последнее предупреждение!!! Даже не думайте менять все кошельки на все свои, это принесет вам только разовый куш, но не принесет настоящего богатства так как вы обманете других и самого себя, лишь участие нескольких участников проекта поможет вам размещать статью до бесконечности без вашего участия. Надеюсь вы меня понимаете. Давайте работать честно,еще раз удачи вам!
  • 14 Ноября 2016 13:06
    kryl
    В контакте не получается вставить эту строчку http://localhost/auth?provider=vk. Знак вопроса мешает . что делать ?
  • Комментарий удален
    • 28 Апреля 2013 14:53
      stas.protasevich
      читайте внимательно ошибки. В случае Google неверно указан redirect_uri в настройках приложения. http://gontarev.ru/index.php?provider=google. Думаю с яндексом то же самое
      • 14 Мая 2013 22:55
        kvinsmart
        Привет! Спасибо за урок! Но у меня не работает ((( ... суть в том,что после запроса с соцсайтов, возвращается строка мойсайт/?code=... и при этом страница белая - никаких признаков работы... Подскажите пожалуйста, в чем причина?
        • 15 Мая 2013 06:15
          stas.protasevich
          скорее всего, неверно указаны параметры, в настройке приложений в соц сетях.
        • 10 Июня 2013 22:09
          sla_mamonov
          у меня тоже отображает только белый экран(
          • 26 Августа 2013 22:29
            nitroi
            'redirect_uri' => 'http://localhost/auth?provider=google'
            замените auth на страницу index.php или какую вы используете
            'redirect_uri' => 'http://localhost/index.php?provider=google'
      • 16 Июня 2014 16:11
        Termin
        Скачал исходники, заполнил все ключи, в базе данных создал таблицу, подключился к базе данных, потом скинул всё по FTP на сервер в каталог auth. Вопрос: Стас, а что дальше делать? И почему только http://localhost/vk-auth, на веб сервере нельзя http://my-site/vk-auth?
        • 26 Июня 2015 01:32
          dee3000
          Warning: Cannot modify header information - headers already sent by (output started at /home/bh17306/public_html/modusnew/aunt/config.inc.php:2) in /home/bh17306/public_html/modusnew/aunt/index.php on line 109
          • 28 Июля 2015 16:33
            stas.protasevich
            Это из-за того, что где-то раньше у вас отправляются заголовки браузеру, открывается сессия
            • 6 Ноября 2015 10:26
              trustdance
              Доброго времени суток Станислав! Вопрос, откуда берется возвращаемая переменная code, и как сменить ее формат с ?code=kajdhqwo123 на /code/kajdhqwo123 в htaccess я прописал, в колбеке надо где-то ее прописывать! Но где
^ Наверх ^