5 Расширение
EAuth позволяет добавить на сайт авторизацию с аккаунтов на других сайтах.
6 Поддерживаемые протоколы: OpenID, OAuth 1.0 и OAuth 2.0.
8 Задачей расширения является предоставление единого (не зависящего от выбранного сервиса) метода авторизации пользователя. Таким образом, расширение самостоятельно не выполняет вход, не регистрирует пользователей и не связывает аккаунты пользователей от разных провайдеров.
10 ### Почему собственное расширение, а не сторонний сервис?
11 Реализация авторизации на стороне собственного сервиса имеет ряд преимуществ:
13 * Полный контроль над процессом авторизации: что будет написано в окне авторизации провайдера, какие данные мы получим и т.д.
14 * Возможность изменять внешний вид виджета авторизации в соответствии с дизайном сайта.
15 * При авторизации через OAuth есть возможность вызывать методы API, если их предоставляет провайдер.
16 * Меньше зависимостей от сторонних сервисов – больше надежность.
18 ### Расширение позволяет:
20 * Абстрагироваться от тонкостей авторизации через различные типы сервисов, использовать классы-адаптеры для каждого сервиса.
21 * Получить уникальный идентификатор пользователя, который можно использовать для регистрации в вашем приложении.
22 * Расширять стандартные классы авторизации для получения дополнительных данных о пользователе.
23 * Работать с API социальных сетей путем расширения класса авторизации необходимого сервиса.
24 * Настраивать список поддерживаемых сайтом сервисов, переопределять внешний вид виджета авторизации, использовать popup окно для авторизации без закрытия вашего приложения.
26 ### Расширение содержит:
28 * Компонент, содержащий вспомогательные функции.
29 * Виджет, выводящий список сервисов в виде иконок и позволяющий проводить авторизацию в popup окне.
30 * Базовые классы для самостоятельного добавления новых сервисов.
31 * Готовые классы для авторизации через Google, Twitter, Facebook и других провайдеров.
33 ### Поддерживаемые провайдеры
"из коробки":
35 * OpenID: Google, Яндекс
37 * OAuth 2.0: Google, Facebook, ВКонтакте, Mail.ru, Мой круг, Одноклассники
43 * [Yii Framework](http:
47 * [
loid extension](http:
48 * [EOAuth extension](http:
51 ### Системные требования
55 * [
loid extension](http:
56 * [EOAuth extension](http:
61 * Установить расширения
loid и EOAuth.
62 * Распаковать расширение
EAuth в директорию `
protected/extensions`.
63 * Добавить следующие строки в файл конфигурации `
protected/config/main.php`:
73 'ext.eauth.services.*',
78 'class' =>
'ext.lightopenid.loid',
81 'class' =>
'ext.eauth.EAuth',
85 'class' =>
'GoogleOpenIDService',
88 'class' =>
'YandexOpenIDService',
92 'class' =>
'TwitterOAuthService',
96 'google_oauth' => array(
98 'class' =>
'GoogleOAuthService',
100 'client_secret' =>
'...',
101 'title' =>
'Google (OAuth)',
105 'class' =>
'FacebookOAuthService',
106 'client_id' =>
'...',
107 'client_secret' =>
'...',
109 'vkontakte' => array(
111 'class' =>
'VKontakteOAuthService',
112 'client_id' =>
'...',
113 'client_secret' =>
'...',
117 'class' =>
'MailruOAuthService',
118 'client_id' =>
'...',
119 'client_secret' =>
'...',
123 'class' =>
'MoikrugOAuthService',
124 'client_id' =>
'...',
125 'client_secret' =>
'...',
127 'odnoklassniki' => array(
129 'class' =>
'OdnoklassnikiOAuthService',
130 'client_id' =>
'...',
131 'client_public' =>
'...',
132 'client_secret' =>
'...',
133 'title' =>
'Однокл.',
145 #### Действие в контроллере
150 public function actionLogin() {
151 $service = Yii::app()->request->getQuery(
'service');
152 if (isset($service)) {
153 $authIdentity = Yii::app()->eauth->
getIdentity($service);
154 $authIdentity->redirectUrl = Yii::app()->user->returnUrl;
155 $authIdentity->cancelUrl = $this->createAbsoluteUrl(
'site/login');
157 if ($authIdentity->authenticate()) {
161 if ($identity->authenticate()) {
162 Yii::app()->user->login($identity);
165 $authIdentity->redirect();
169 $authIdentity->cancel();
174 $this->redirect(array(
'site/login'));
184 <h2>Нажмите на иконку для входа через один из сайтов:</h2>
186 $this->widget(
'ext.eauth.EAuthWidget', array(
'action' =>
'site/login'));
190 #### Получение дополнительных данных (не обязательно)
192 Чтобы получать все необходимые Вашему приложению данные, Вы можете переопределить базовый класс любого провайдера.
193 Базовые классы хранятся в `
protected/extensions/eauth/services/`.
194 Примеры расширенных классов можно посмотреть в `
protected/extensions/eauth/custom_services/`.
196 После переопределения базового класса, необходимо поправить Ваш файл конфигурации, указав новое имя класса.
197 Возможно, Вам понадобится переопределить `
EAuthUserIdentity` для сохранения дополнительных данных.
199 #### Перевод сообщений (не обязательно)
201 * Для перевода
EAuth на другие языки скопируйте файл `/
protected/extensions/eauth/messages/[lang]/eauth.php` в `/
protected/messages/[lang]/eauth.php`, где [lang] - код необходимого языка.
202 * Если в `/
protected/extensions/eauth/messages/` нет нужного Вам языка, можно воспользоваться файлом `/
protected/extensions/eauth/messages/blank/eauth.php` для перевода расширения на другие языки.
206 Некоторое время назад я разработал данное расширение для своего проекта [LiStick.ru](http:
208 Расширение предоставляется под лицензией [New BSD License](http: