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

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

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

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