Gentics Portal.Node PHP API
 All Classes Namespaces Functions Variables Pages
Yii EAuth extension

Расширение EAuth позволяет добавить на сайт авторизацию с аккаунтов на других сайтах. Поддерживаемые протоколы: OpenID, OAuth 1.0 и OAuth 2.0.

Задачей расширения является предоставление единого (не зависящего от выбранного сервиса) метода авторизации пользователя. Таким образом, расширение самостоятельно не выполняет вход, не регистрирует пользователей и не связывает аккаунты пользователей от разных провайдеров.

Почему собственное расширение, а не сторонний сервис?

Реализация авторизации на стороне собственного сервиса имеет ряд преимуществ:

Расширение позволяет:

Расширение содержит:

Поддерживаемые провайдеры "из коробки":

Ссылки

Системные требования

Установка

```php <?php ... 'import'=>array( 'ext.eoauth.*', 'ext.eoauth.lib.*', 'ext.lightopenid.*', 'ext.eauth.*', 'ext.eauth.services.*', ), ... 'components'=>array( 'loid' => array( 'class' => 'ext.lightopenid.loid', ), 'eauth' => array( 'class' => 'ext.eauth.EAuth', 'popup' => true, // Использовать всплывающее окно вместо перенаправления на сайт провайдера 'services' => array( // Вы можете настроить список провайдеров и переопределить их классы 'google' => array( 'class' => 'GoogleOpenIDService', ), 'yandex' => array( 'class' => 'YandexOpenIDService', ), 'twitter' => array( // регистрация приложения: https://dev.twitter.com/apps/new 'class' => 'TwitterOAuthService', 'key' => '...', 'secret' => '...', ), 'google_oauth' => array( // регистрация приложения: https://code.google.com/apis/console/ 'class' => 'GoogleOAuthService', 'client_id' => '...', 'client_secret' => '...', 'title' => 'Google (OAuth)', ), 'facebook' => array( // регистрация приложения: https://developers.facebook.com/apps/ 'class' => 'FacebookOAuthService', 'client_id' => '...', 'client_secret' => '...', ), 'vkontakte' => array( // регистрация приложения: http://vkontakte.ru/editapp?act=create&site=1 'class' => 'VKontakteOAuthService', 'client_id' => '...', 'client_secret' => '...', ), 'mailru' => array( // регистрация приложения: http://api.mail.ru/sites/my/add 'class' => 'MailruOAuthService', 'client_id' => '...', 'client_secret' => '...', ), 'moikrug' => array( // регистрация приложения: https://oauth.yandex.ru/client/my 'class' => 'MoikrugOAuthService', 'client_id' => '...', 'client_secret' => '...', ), 'odnoklassniki' => array( // регистрация приложения: http://www.odnoklassniki.ru/dk?st.cmd=appsInfoMyDevList&st._aid=Apps_Info_MyDev 'class' => 'OdnoklassnikiOAuthService', 'client_id' => '...', 'client_public' => '...', 'client_secret' => '...', 'title' => 'Однокл.', ), ), ), ... ), ... ```

Использование

Действие в контроллере

```php <?php ... public function actionLogin() { $service = Yii::app()->request->getQuery('service'); if (isset($service)) { $authIdentity = Yii::app()->eauth->getIdentity($service); $authIdentity->redirectUrl = Yii::app()->user->returnUrl; $authIdentity->cancelUrl = $this->createAbsoluteUrl('site/login');

if ($authIdentity->authenticate()) { $identity = new EAuthUserIdentity($authIdentity);

// успешная авторизация if ($identity->authenticate()) { Yii::app()->user->login($identity);

// специальное перенаправления для корректного закрытия всплывающего окна $authIdentity->redirect(); } else { // закрытие всплывающего окна и перенаправление на cancelUrl $authIdentity->cancel(); } }

// авторизация не удалась, перенаправляем на страницу входа $this->redirect(array('site/login')); }

// далее стандартный код авторизации по логину/паролю... } ```

Представление

```php

Нажмите на иконку для входа через один из сайтов:

<?php $this->widget('ext.eauth.EAuthWidget', array('action' => 'site/login')); ?> ```

Получение дополнительных данных (не обязательно)

Чтобы получать все необходимые Вашему приложению данные, Вы можете переопределить базовый класс любого провайдера. Базовые классы хранятся в protected/extensions/eauth/services/. Примеры расширенных классов можно посмотреть в protected/extensions/eauth/custom_services/.

После переопределения базового класса, необходимо поправить Ваш файл конфигурации, указав новое имя класса. Возможно, Вам понадобится переопределить EAuthUserIdentity для сохранения дополнительных данных.

Перевод сообщений (не обязательно)

Лицензия

Некоторое время назад я разработал данное расширение для своего проекта LiStick.ru. На данный момент я продолжаю поддерживать расширение.

Расширение предоставляется под лицензией New BSD License, так что последнюю версию можно найти на GitHub.