Функциональность OAuth-авторизации через внешние сервисы вынесена на системный уровень и реализована в виде адаптеров авторизации. В состав фреймворка включены адаптеры авторизации для следующих платформ: «Фейсбук», «Твиттер», «Гугл», «ВКонтакте», «Яндекс».
Адаптеры авторизации включаются отдельно для каждого домена, настроенного в вашем Webasyst-аккаунте. Для этого каждый домен нужно зарегистрировать в соответствующем внешнем сервисе в виде OAuth-приложения:
Регистрируя приложение, вы получаете app_id (идентификатор или ключ приложения) и api_secret, которые необходимо указать в файле
wa-config/auth.php (если файла не существует, создайте его, скопировав в него следующее содержание,
заменив многоточия ... на значения параметров, полученные при регистрации приложения):
<?php
return [
'domain1.ru' => [
'adapters' => [
'facebook' => [
'app_id' => "...",
'app_secret' => "...",
],
'twitter' => [
'app_id' => "...",
'app_secret' => "...",
],
'google' => [
'app_id' => "...",
'app_secret' => "...",
],
'vkontakte' => [
'app_id' => "...",
'app_secret' => "...",
],
],
],
'domain2.ru' => [
//настройки для второго домена
],
//остальные домены аналогично
];
Параметры авторизации автоматически сохраняются в файл 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;
}
}









