Gentics Portal.Node PHP API
 All Classes Namespaces Functions Variables Pages
common/extensions/eauth/README_RU.md
1 Yii EAuth extension
2 ===================
3 
4 
5 Расширение EAuth позволяет добавить на сайт авторизацию с аккаунтов на других сайтах.
6 Поддерживаемые протоколы: OpenID, OAuth 1.0 и OAuth 2.0.
7 
8 Задачей расширения является предоставление единого (не зависящего от выбранного сервиса) метода авторизации пользователя. Таким образом, расширение самостоятельно не выполняет вход, не регистрирует пользователей и не связывает аккаунты пользователей от разных провайдеров.
9 
10 ### Почему собственное расширение, а не сторонний сервис?
11 Реализация авторизации на стороне собственного сервиса имеет ряд преимуществ:
12 
13 * Полный контроль над процессом авторизации: что будет написано в окне авторизации провайдера, какие данные мы получим и т.д.
14 * Возможность изменять внешний вид виджета авторизации в соответствии с дизайном сайта.
15 * При авторизации через OAuth есть возможность вызывать методы API, если их предоставляет провайдер.
16 * Меньше зависимостей от сторонних сервисов – больше надежность.
17 
18 ### Расширение позволяет:
19 
20 * Абстрагироваться от тонкостей авторизации через различные типы сервисов, использовать классы-адаптеры для каждого сервиса.
21 * Получить уникальный идентификатор пользователя, который можно использовать для регистрации в вашем приложении.
22 * Расширять стандартные классы авторизации для получения дополнительных данных о пользователе.
23 * Работать с API социальных сетей путем расширения класса авторизации необходимого сервиса.
24 * Настраивать список поддерживаемых сайтом сервисов, переопределять внешний вид виджета авторизации, использовать popup окно для авторизации без закрытия вашего приложения.
25 
26 ### Расширение содержит:
27 
28 * Компонент, содержащий вспомогательные функции.
29 * Виджет, выводящий список сервисов в виде иконок и позволяющий проводить авторизацию в popup окне.
30 * Базовые классы для самостоятельного добавления новых сервисов.
31 * Готовые классы для авторизации через Google, Twitter, Facebook и других провайдеров.
32 
33 ### Поддерживаемые провайдеры "из коробки":
34 
35 * OpenID: Google, Яндекс
36 * OAuth: Twitter
37 * OAuth 2.0: Google, Facebook, ВКонтакте, Mail.ru, Мой круг, Одноклассники
38 
39 
40 ### Ссылки
41 
42 * [Yii EAuth](https://github.com/Nodge/yii-eauth)
43 * [Yii Framework](http://yiiframework.com/)
44 * [OpenID](http://openid.net/)
45 * [OAuth](http://oauth.net/)
46 * [OAuth 2.0](http://oauth.net/2/)
47 * [loid extension](http://www.yiiframework.com/extension/loid)
48 * [EOAuth extension](http://www.yiiframework.com/extension/eoauth)
49 
50 
51 ### Системные требования
52 
53 * Yii 1.1 or above
54 * PHP curl extension
55 * [loid extension](http://www.yiiframework.com/extension/loid)
56 * [EOAuth extension](http://www.yiiframework.com/extension/eoauth)
57 
58 
59 ## Установка
60 
61 * Установить расширения loid и EOAuth.
62 * Распаковать расширение EAuth в директорию `protected/extensions`.
63 * Добавить следующие строки в файл конфигурации `protected/config/main.php`:
64 
65 ```php
66 <?php
67 ...
68  'import'=>array(
69  'ext.eoauth.*',
70  'ext.eoauth.lib.*',
71  'ext.lightopenid.*',
72  'ext.eauth.*',
73  'ext.eauth.services.*',
74  ),
75 ...
76  'components'=>array(
77  'loid' => array(
78  'class' => 'ext.lightopenid.loid',
79  ),
80  'eauth' => array(
81  'class' => 'ext.eauth.EAuth',
82  'popup' => true, // Использовать всплывающее окно вместо перенаправления на сайт провайдера
83  'services' => array( // Вы можете настроить список провайдеров и переопределить их классы
84  'google' => array(
85  'class' => 'GoogleOpenIDService',
86  ),
87  'yandex' => array(
88  'class' => 'YandexOpenIDService',
89  ),
90  'twitter' => array(
91  // регистрация приложения: https://dev.twitter.com/apps/new
92  'class' => 'TwitterOAuthService',
93  'key' => '...',
94  'secret' => '...',
95  ),
96  'google_oauth' => array(
97  // регистрация приложения: https://code.google.com/apis/console/
98  'class' => 'GoogleOAuthService',
99  'client_id' => '...',
100  'client_secret' => '...',
101  'title' => 'Google (OAuth)',
102  ),
103  'facebook' => array(
104  // регистрация приложения: https://developers.facebook.com/apps/
105  'class' => 'FacebookOAuthService',
106  'client_id' => '...',
107  'client_secret' => '...',
108  ),
109  'vkontakte' => array(
110  // регистрация приложения: http://vkontakte.ru/editapp?act=create&site=1
111  'class' => 'VKontakteOAuthService',
112  'client_id' => '...',
113  'client_secret' => '...',
114  ),
115  'mailru' => array(
116  // регистрация приложения: http://api.mail.ru/sites/my/add
117  'class' => 'MailruOAuthService',
118  'client_id' => '...',
119  'client_secret' => '...',
120  ),
121  'moikrug' => array(
122  // регистрация приложения: https://oauth.yandex.ru/client/my
123  'class' => 'MoikrugOAuthService',
124  'client_id' => '...',
125  'client_secret' => '...',
126  ),
127  'odnoklassniki' => array(
128  // регистрация приложения: http://www.odnoklassniki.ru/dk?st.cmd=appsInfoMyDevList&st._aid=Apps_Info_MyDev
129  'class' => 'OdnoklassnikiOAuthService',
130  'client_id' => '...',
131  'client_public' => '...',
132  'client_secret' => '...',
133  'title' => 'Однокл.',
134  ),
135  ),
136  ),
137  ...
138  ),
139 ...
140 ```
141 
142 
143 ## Использование
144 
145 #### Действие в контроллере
146 
147 ```php
148 <?php
149 ...
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');
156 
157  if ($authIdentity->authenticate()) {
158  $identity = new EAuthUserIdentity($authIdentity);
159 
160  // успешная авторизация
161  if ($identity->authenticate()) {
162  Yii::app()->user->login($identity);
163 
164  // специальное перенаправления для корректного закрытия всплывающего окна
165  $authIdentity->redirect();
166  }
167  else {
168  // закрытие всплывающего окна и перенаправление на cancelUrl
169  $authIdentity->cancel();
170  }
171  }
172 
173  // авторизация не удалась, перенаправляем на страницу входа
174  $this->redirect(array('site/login'));
175  }
176 
177  // далее стандартный код авторизации по логину/паролю...
178  }
179 ```
180 
181 #### Представление
182 
183 ```php
184 <h2>Нажмите на иконку для входа через один из сайтов:</h2>
185 <?php
186  $this->widget('ext.eauth.EAuthWidget', array('action' => 'site/login'));
187 ?>
188 ```
189 
190 #### Получение дополнительных данных (не обязательно)
191 
192 Чтобы получать все необходимые Вашему приложению данные, Вы можете переопределить базовый класс любого провайдера.
193 Базовые классы хранятся в `protected/extensions/eauth/services/`.
194 Примеры расширенных классов можно посмотреть в `protected/extensions/eauth/custom_services/`.
195 
196 После переопределения базового класса, необходимо поправить Ваш файл конфигурации, указав новое имя класса.
197 Возможно, Вам понадобится переопределить `EAuthUserIdentity` для сохранения дополнительных данных.
198 
199 #### Перевод сообщений (не обязательно)
200 
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` для перевода расширения на другие языки.
203 
204 ## Лицензия
205 
206 Некоторое время назад я разработал данное расширение для своего проекта [LiStick.ru](http://listick.ru). На данный момент я продолжаю поддерживать расширение.
207 
208 Расширение предоставляется под лицензией [New BSD License](http://www.opensource.org/licenses/bsd-license.php), так что последнюю версию можно найти на [GitHub](https://github.com/Nodge/yii-eauth).