Permalink
Browse files

Change vkontakte.ru to vk.com. Add option for disable cache. Add opti…

…on for time to life (expire) of cache. Add option to widget for predefined services.
  • Loading branch information...
DenisMedved committed Aug 13, 2012
1 parent 7d6d218 commit bdfac0bc6ac7a1217a934d6fa9def764db10b260
Showing with 66 additions and 40 deletions.
  1. +16 −4 EAuth.php
  2. +2 −2 EAuthUserIdentity.php
  3. +26 −12 EAuthWidget.php
  4. +8 −8 README.md
  5. +9 −9 README_RU.md
  6. +1 −1 custom_services/CustomVKontakteService.php
  7. +4 −4 services/VKontakteOAuthService.php
View
@@ -13,6 +13,16 @@
*/
class EAuth extends CApplicationComponent {
+ /**
+ * @var integer the number of seconds in which the cached value will expire. 0 means never expire. False for disable cache
+ */
+ public $cacheExpire = 0;
+
+ /**
+ * @var boolean If true method EAuth::getServices() use cache. Default true.
+ */
+ public $useCache = true;
+
/**
* @var array Authorization services and their settings.
*/
@@ -34,9 +44,11 @@ class EAuth extends CApplicationComponent {
* @return array services settings.
*/
public function getServices() {
- if (Yii::app()->hasComponent('cache'))
+ $services = false;
+ if (Yii::app()->hasComponent('cache') && $this->useCache)
$services = Yii::app()->cache->get('EAuth.services');
- if (!isset($services) || !is_array($services)) {
+
+ if (false === $services || !is_array($services)) {
$services = array();
foreach ($this->services as $service => $options) {
$class = $this->getIdentity($service);
@@ -47,8 +59,8 @@ public function getServices() {
'jsArguments' => $class->getJsArguments(),
);
}
- if (Yii::app()->hasComponent('cache'))
- Yii::app()->cache->set('EAuth.services', $services);
+ if (Yii::app()->hasComponent('cache') && $this->useCache)
+ Yii::app()->cache->set('EAuth.services', $services, $this->cacheExpire);
}
return $services;
}
View
@@ -12,7 +12,7 @@
* @package application.extensions.eauth
*/
class EAuthUserIdentity extends CBaseUserIdentity {
-
+
const ERROR_NOT_AUTHENTICATED = 3;
/**
@@ -55,7 +55,7 @@ public function authenticate() {
// You can save all given attributes in session.
//$attributes = $this->service->getAttributes();
//$session = Yii::app()->session;
- //$session['eauth_attributes'] = $attributes;
+ //$session['eauth_attributes'][$this->service->serviceName] = $attributes;
$this->errorCode = self::ERROR_NONE;
}
View
@@ -12,23 +12,28 @@
* @package application.extensions.eauth
*/
class EAuthWidget extends CWidget {
-
+
/**
* @var string EAuth component name.
*/
public $component = 'eauth';
-
+
/**
* @var array the services.
- * @see EAuth::getServices()
+ * @see EAuth::getServices()
*/
public $services = null;
-
+
+ /**
+ * @var array predefined services. If null then use all services. Default is null.
+ */
+ public $predefinedServices = null;
+
/**
* @var boolean whether to use popup window for authorization dialog. Javascript required.
*/
public $popup = null;
-
+
/**
* @var string the action to use for dialog destination. Default: the current route.
*/
@@ -42,36 +47,45 @@ class EAuthWidget extends CWidget {
*/
public function init() {
parent::init();
-
+
// EAuth component
- $component = Yii::app()->{$this->component};
-
+ $component = Yii::app()->getComponent($this->component);
+
// Some default properties from component configuration
if (!isset($this->services))
$this->services = $component->getServices();
+
+ if (isset($this->predefinedServices) && is_array($this->predefinedServices)) {
+ $tmpServices = $this->services;
+ $this->services = array();
+ foreach ($tmpServices as $serviceName => $data)
+ if (in_array($serviceName, $this->predefinedServices, true))
+ $this->services[$serviceName] = $data;
+ }
+
if (!isset($this->popup))
$this->popup = $component->popup;
-
+
// Set the current route, if it is not set.
if (!isset($this->action))
$this->action = Yii::app()->urlManager->parseUrl(Yii::app()->request);
}
-
+
/**
* Executes the widget.
* This method is called by {@link CBaseController::endWidget}.
*/
public function run() {
parent::run();
-
+
$this->registerAssets();
$this->render('auth', array(
'id' => $this->getId(),
'services' => $this->services,
'action' => $this->action,
));
}
-
+
/**
* Register CSS and JS files.
*/
View
@@ -23,7 +23,7 @@ The implementation of the authorization on your own server has several advantage
* Extend the standard authorization classes to obtain additional data about the user.
* Work with the API of social networks by extending the authorization classes.
* Set up a list of supported services, customize the appearance of the widget, use the popup window without closing your application.
-
+
### Extension includes:
@@ -135,7 +135,7 @@ The implementation of the authorization on your own server has several advantage
'client_secret' => '...',
),
'vkontakte' => array(
- // register your app here: http://vkontakte.ru/editapp?act=create&site=1
+ // register your app here: https://vk.com/editapp?act=create&site=1
'class' => 'VKontakteOAuthService',
'client_id' => '...',
'client_secret' => '...',
@@ -181,14 +181,14 @@ The implementation of the authorization on your own server has several advantage
$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);
-
+
// successful authentication
if ($identity->authenticate()) {
Yii::app()->user->login($identity);
-
+
// special redirect with closing popup window
$authIdentity->redirect();
}
@@ -197,11 +197,11 @@ The implementation of the authorization on your own server has several advantage
$authIdentity->cancel();
}
}
-
+
// Something went wrong, redirect to login page
$this->redirect(array('site/login'));
}
-
+
// default authorization code through login/password ..
}
```
@@ -210,7 +210,7 @@ The implementation of the authorization on your own server has several advantage
```php
<h2>Do you already have an account on one of these sites? Click the logo to log in with it here:</h2>
-<?php
+<?php
$this->widget('ext.eauth.EAuthWidget', array('action' => 'site/login'));
?>
```
View
@@ -22,7 +22,7 @@ Yii EAuth extension
* Расширять стандартные классы авторизации для получения дополнительных данных о пользователе.
* Работать с API социальных сетей путем расширения класса авторизации необходимого сервиса.
* Настраивать список поддерживаемых сайтом сервисов, переопределять внешний вид виджета авторизации, использовать popup окно для авторизации без закрытия вашего приложения.
-
+
### Расширение содержит:
* Компонент, содержащий вспомогательные функции.
@@ -132,7 +132,7 @@ Yii EAuth extension
'client_secret' => '...',
),
'vkontakte' => array(
- // регистрация приложения: http://vkontakte.ru/editapp?act=create&site=1
+ // регистрация приложения: http://vk.com/editapp?act=create&site=1
'class' => 'VKontakteOAuthService',
'client_id' => '...',
'client_secret' => '...',
@@ -178,14 +178,14 @@ Yii EAuth extension
$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();
}
@@ -194,11 +194,11 @@ Yii EAuth extension
$authIdentity->cancel();
}
}
-
+
// авторизация не удалась, перенаправляем на страницу входа
$this->redirect(array('site/login'));
}
-
+
// далее стандартный код авторизации по логину/паролю...
}
```
@@ -207,14 +207,14 @@ Yii EAuth extension
```php
<h2>Нажмите на иконку для входа через один из сайтов:</h2>
-<?php
+<?php
$this->widget('ext.eauth.EAuthWidget', array('action' => 'site/login'));
?>
```
#### Получение дополнительных данных (не обязательно)
-Чтобы получать все необходимые Вашему приложению данные, Вы можете переопределить базовый класс любого провайдера.
+Чтобы получать все необходимые Вашему приложению данные, Вы можете переопределить базовый класс любого провайдера.
Базовые классы хранятся в `protected/extensions/eauth/services/`.
Примеры расширенных классов можно посмотреть в `protected/extensions/eauth/custom_services/`.
@@ -26,7 +26,7 @@ protected function fetchAttributes() {
$this->attributes['id'] = $info->uid;
$this->attributes['name'] = $info->first_name.' '.$info->last_name;
- $this->attributes['url'] = 'http://vkontakte.ru/id'.$info->uid;
+ $this->attributes['url'] = 'http://vk.com/id'.$info->uid;
if (!empty($info->nickname))
$this->attributes['username'] = $info->nickname;
@@ -2,7 +2,7 @@
/**
* VKontakteOAuthService class file.
*
- * Register application: http://vkontakte.ru/editapp?act=create&site=1
+ * Register application: http://vk.com/editapp?act=create&site=1
*
* @author Maxim Zemskov <nodge@yandex.ru>
* @link http://github.com/Nodge/yii-eauth/
@@ -26,8 +26,8 @@ class VKontakteOAuthService extends EOAuth2Service {
protected $client_secret = '';
protected $scope = 'friends';
protected $providerOptions = array(
- 'authorize' => 'http://api.vkontakte.ru/oauth/authorize',
- 'access_token' => 'https://api.vkontakte.ru/oauth/access_token',
+ 'authorize' => 'http://api.vk.com/oauth/authorize',
+ 'access_token' => 'https://api.vk.com/oauth/access_token',
);
protected $uid = null;
@@ -45,7 +45,7 @@ protected function fetchAttributes() {
$this->attributes['id'] = $info->uid;
$this->attributes['name'] = $info->first_name.' '.$info->last_name;
- $this->attributes['url'] = 'http://vkontakte.ru/id'.$info->uid;
+ $this->attributes['url'] = 'http://vk.com/id'.$info->uid;
/*if (!empty($info->nickname))
$this->attributes['username'] = $info->nickname;

0 comments on commit bdfac0b

Please sign in to comment.