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

Авторизация через сторонние сервисы: Фейсбук, Твиттер, Гугл, ВКонтакте, Яндекс, 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;
      }
  
  }