Адаптеры авторизации

Авторизация через сторонние сервисы: Фейсбук, Твиттер, Гугл, ВКонтакте, Яндекс, Mail.ru

Содержание...

Функциональность OAuth-авторизации через внешние сервисы вынесена на системный уровень и реализована в виде адаптеров авторизации. В состав фреймворка включены адаптеры авторизации для следующих платформ: «Фейсбук», «Твиттер», «Гугл», «ВКонтакте», «Яндекс».

Адаптеры авторизации включаются отдельно для каждого домена, настроенного в вашем Webasyst-аккаунте. Для этого каждый домен нужно зарегистрировать в соответствующем внешнем сервисе в виде OAuth-приложения:

Регистрируя приложение, вы получаете app_id (идентификатор или ключ приложения) и api_secret, которые необходимо указать в файле wa-config/auth.php (если файла не существует, создайте его, скопировав в него следующее содержание, заменив многоточия ... на значения параметров, полученные при регистрации приложения):

<?php

return array(
    'domain1.ru' => array(
        'adapters' => array(
            'facebook' => array(
                'app_id' => "...",
                'app_secret' => "...",
          	),
            'twitter' => array(
                'app_id' => "...",
                'app_secret' => "...",
            ),
            'google' => array(
                'app_id' => "...",
                'app_secret' => "...",
            ),
            'vkontakte' => array(
                'app_id' => "...",
                'app_secret' => "...",
            ),    
        ),
    ),
    'domain2.ru' => array(
        //настройки для второго домена
    ),
    //остальные домены аналогично
);
Параметры авторизации автоматически сохраняются в файл wa-config/auth.php при использовании раздела «Настройки → Авторизация» приложения «Сайт».

После подключения указанным образом возможность OAuth-авторизации для указанных доменов заработает автоматически, однако, только в тех приложениях, которые поддерживают OAuth-авторизацию через адаптеры авторизации. Например, в приложении «Блог» подключенные адаптеры позволят пользователям авторизоваться для добавления комментариев.

Интеграция OAuth-авторизации с помощью адаптеров авторизации в каждом приложении реализуется исключительно на усмотрение разработчика приложения. Если после подключения адаптера авторизации возможность авторизации не появилась в нужном вам приложении, свяжитесь с разработчиком этого приложения и уточните, поддерживается ли такая возможность в этом приложении.

Интеграция OAuth-авторизации через адаптеры авторизации в своем приложении

Чтобы в вашем приложении реализовать возможность входа через социальные сети, достаточно просто в нужном месте добавить в шаблон:

{$wa->authAdapters()}

Этот код вставит блок из ссылок с иконками настроенных вами адаптеров авторизации.

По умолчанию после успешного ответа от внешнего сервиса (соцсети) создается новый контакт (либо находится старый, если пользователь уже зарегистрирован), и этот новый контакт автоматически авторизуется. С точки зрения разработчика такой пользователь ничем не отличается от обычного пользователя.

Как получить доступ к текущему авторизованному пользователю:

// из контроллеров и экшенов
$this->getUser();
    
// из любого другого места
wa()->getUser();

Вы также можете реализовать свою обработку ответа от социальной сети.
Для этого нужно создать файл wa-apps/[APP_ID]/lib/actions/[APP_ID]OAuth.controller.php:

<?php

class [APP_ID]OAuthController extends waOAuthController
{

    // ваша реализация     

}      

Например, в приложении Гостевая книга 2 после успешного создания контакта он добавляется в системную категорию приложения, что позволяет легко найти в приложении «Контакты» всех пользователей, которые имеют отношение к «Гостевой книге 2».

/**
 * Контроллер обработки регистраций/авторизаций через социальные сети
 */
class guestbook2OAuthController extends waOAuthController
{

    /**
     * Этот метод вызывается после успешной авторизации через социальные сети
     * @param array $data - унифицированные данные от социальной сети
     * @return waContact
     */
    public function afterAuth($data)
    {
        // Вызываем родительский метод (поведение по умолчанию)
        $contact = parent::afterAuth($data);
        // Если контакт был успешно авторизован и не является пользователем бекенда
        if ($contact && !$contact['is_user']) {
            // Добавляем контакт в системную категорию «Гостевой книги 2»
            $contact->addToCategory($this->getAppId());
        }
        return $contact;
    }

}