Функциональность 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; } }