CWebUser
| Пакет | system.web.auth |
|---|---|
| Наследование | class CWebUser » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent, IWebUser |
| С момента | 1.0 |
| Исходный код | framework/web/auth/CWebUser.php |
CWebUser используется как компонент приложения с идентификатором 'user'. Поэтому в любом месте можно получить доступ к состоянию пользователя с помощью
Yii::app()->user. CWebUser следует использовать вместе с представителем, который реализует фактический алгоритм аутентификации.
Типичный процесс аутентификации с использованием CWebUser выглядит следующим образом:
- Пользователь предоставляет информацию, необходимую для аутентификации.
- Создается экземпляр представителя идентификатора с предоставленной пользователем информацией.
- Вызовите IUserIdentity::authenticate, чтобы проверить, является ли идентификатор действительным.
- Если действителен, вызовите CWebUser::login, чтобы войти в систему пользователю, и перенаправьте браузер пользователя на returnUrl.
- Если недействителен, получите код или сообщение об ошибке из экземпляра идентификатора и отобразите его.
Свойство id и name являются идентификаторами пользователя. Первый используется в основном внутри (например, первичный ключ), а второй — для отображения (например, имя пользователя). Свойство id — уникальный идентификатор пользователя, сохраняемый на протяжении всей сессии пользователя. Это может быть имя пользователя или что-то другое, в зависимости от реализации класса идентификатора.
Оба свойства id и name сохраняются в течение сессии пользователя. Кроме того, идентификатор может содержать дополнительные постоянные данные, к которым можно получить доступ, вызвав getState. Обратите внимание, что при включенной аутентификации на основе cookie все эти постоянные данные будут храниться в cookie. Поэтому не храните пароль или другие конфиденциальные данные в постоянном хранилище. Вместо этого, при необходимости, сохраняйте их непосредственно в сессии на стороне сервера.
Свойства публичного доступа
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| absoluteAuthTimeout | целое число | таймаут в секундах, после которого пользователь выходит из системы, независимо от активности. | CWebUser |
| allowAutoLogin | булево | включить авторизацию на основе cookie. | CWebUser |
| authTimeout | целое число | таймаут в секундах, после которого пользователь выходит из системы, если неактивен. | CWebUser |
| autoRenewCookie | булево | автоматически обновлять cookie идентификатора каждый раз при запросе страницы. | CWebUser |
| autoUpdateFlash | булево | автоматически обновлять актуальность всплывающих сообщений. | CWebUser |
| behaviors | массив | поведения, которые необходимо прикрепить к данному компоненту. | CApplicationComponent |
| flashes | массив | Возвращает все всплывающие сообщения. | CWebUser |
| guestName | строка | имя для гостевого пользователя. | CWebUser |
| id | смешанный | Возвращает значение, уникально представляющее пользователя. | CWebUser |
| identityCookie | массив | значения свойств (в виде пар имя-значение), используемые для инициализации cookie идентификатора. | CWebUser |
| isGuest | булево | возвращает значение, указывающее, является ли пользователь гостем (не авторизован). | CWebUser |
| isInitialized | булево | Проверяет, был ли инициализирован компонент приложения. | CApplicationComponent |
| loginRequiredAjaxResponse | строка | значение, которое будет выведено в случае истечения срока действия сессии пользователя во время AJAX-вызова. | CWebUser |
| loginUrl | строка|массив | URL для входа в систему. | CWebUser |
| name | строка | Возвращает уникальный идентификатор пользователя (например, имя пользователя). | CWebUser |
| returnUrl | строка | Возвращает URL, на который должен быть перенаправлен пользователь после успешного входа в систему. | CWebUser |
| stateKeyPrefix | строка | префикс для имени переменных сессии, хранящих данные сессии пользователя. | CWebUser |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __get() | Магический метод PHP. | CWebUser |
| __isset() | Магический метод PHP. | CWebUser |
| __set() | Магический метод PHP. | CWebUser |
| __unset() | Магический метод PHP. | CWebUser |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Прикрепляет поведение к данному компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик события к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| checkAccess() | Выполняет проверку доступа для данного пользователя. | CWebUser |
| clearStates() | Очищает всю информацию о личности пользователя из постоянного хранилища. | CWebUser |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик события. | CComponent |
| disableBehavior() | Отключает присоединенное поведение. | CComponent |
| disableBehaviors() | Отключает все присоединенные к этому компоненту поведения. | CComponent |
| enableBehavior() | Включает присоединенное поведение. | CComponent |
| enableBehaviors() | Включает все присоединенные к этому компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет PHP выражение или обратный вызов в контексте данного компонента. | CComponent |
| getEventHandlers() | Возвращает список присоединенных обработчиков событий для события. | CComponent |
| getFlash() | Возвращает сообщение всплывающего окна. | CWebUser |
| getFlashes() | Возвращает все сообщения всплывающего окна. | CWebUser |
| getId() | Возвращает значение, уникально представляющее пользователя. | CWebUser |
| getIsGuest() | Возвращает значение, указывающее, является ли пользователь гостем (не авторизован). | CWebUser |
| getIsInitialized() | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| getName() | Возвращает уникальный идентификатор пользователя (например, имя пользователя). | CWebUser |
| getReturnUrl() | Возвращает URL, на который пользователь должен быть перенаправлен после успешного входа. | CWebUser |
| getState() | Возвращает значение переменной, хранящейся в сеансе пользователя. | CWebUser |
| getStateKeyPrefix() | Возвращает префикс для имени переменных сеанса, хранящих данные сеанса пользователя. | CWebUser |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли присоединенные обработчики для события с указанным именем. | CComponent |
| hasFlash() | Определяет, существует ли указанное сообщение всплывающего окна. | CWebUser |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| hasState() | Возвращает значение, указывающее, есть ли состояние с указанным именем. | CWebUser |
| init() | Инициализирует компонент приложения. | CWebUser |
| login() | Выполняет вход пользователя. | CWebUser |
| loginRequired() | Перенаправляет браузер пользователя на страницу входа. | CWebUser |
| logout() | Выходит текущий пользователь. | CWebUser |
| raiseEvent() | Вызывает событие. | CComponent |
| setFlash() | Хранит сообщение всплывающего окна. | CWebUser |
| setId() | Устанавливает уникальный идентификатор для пользователя. Если null, это означает, что пользователь является гостем. | CWebUser |
| setName() | Устанавливает уникальный идентификатор пользователя (например, имя пользователя). | CWebUser |
| setReturnUrl() | Устанавливает URL, на который пользователь должен быть перенаправлен после входа. | CWebUser |
| setState() | Хранит переменную в сеансе пользователя. | CWebUser |
| setStateKeyPrefix() | Устанавливает префикс для имени переменных сеанса, хранящих данные сеанса пользователя. | CWebUser |
Защищенные методы
| Метод | Описание | Определено в |
|---|---|---|
| afterLogin() | Этот метод вызывается после успешного входа пользователя. | CWebUser |
| afterLogout() | Этот метод вызывается сразу после выхода пользователя. | CWebUser |
| beforeLogin() | Этот метод вызывается перед входом пользователя. | CWebUser |
| beforeLogout() | Этот метод вызывается при вызове logout для выхода пользователя. | CWebUser |
| changeIdentity() | Изменяет текущего пользователя с указанной информацией о личности. | CWebUser |
| createIdentityCookie() | Создает cookie для хранения информации о личности. | CWebUser |
| loadIdentityStates() | Загружает состояния личности из массива и сохраняет их в постоянном хранилище. | CWebUser |
| renewCookie() | Обновляет cookie личности. | CWebUser |
| restoreFromCookie() | Заполняет текущий объект пользователя информацией, полученной из cookie. | CWebUser |
| saveIdentityStates() | Извлекает состояния личности из постоянного хранилища и сохраняет их в виде массива. | CWebUser |
| saveToCookie() | Сохраняет необходимые данные пользователя в cookie. | CWebUser |
| updateAuthStatus() | Обновляет статус аутентификации в соответствии с authTimeout. | CWebUser |
| updateFlash() | Обновляет внутренние счетчики для сообщений всплывающего окна. | CWebUser |
Подробное описание свойств
absoluteAuthTimeout свойство (доступно с v1.1.14)
public integer $absoluteAuthTimeout;
время в секундах, после которого пользователь будет выведен из системы независимо от активности.
allowAutoLogin свойство
public boolean $allowAutoLogin;
включить или отключить авторизацию через куки. По умолчанию false.
authTimeout свойство (доступно с v1.1.7)
public integer $authTimeout;
время в секундах, после которого пользователь будет выведен из системы, если он неактивен. Если это свойство не задано, пользователь будет выведен из системы после истечения текущей сессии (см. CHttpSession::timeout).
autoRenewCookie свойство (доступно с v1.1.0)
public boolean $autoRenewCookie;
автоматически обновлять куки пользователя при каждом запросе страницы. По умолчанию false. Это свойство эффективно только если allowAutoLogin равно true. Если false, куки пользователя истекают через заданное время с момента первоначального входа в систему. Если true, куки пользователя истекают через заданное время с момента последнего посещения сайта пользователем.
См. также
autoUpdateFlash свойство (доступно с v1.1.7)
public boolean $autoUpdateFlash;
автоматически обновлять срок действия всплывающих сообщений. По умолчанию true, что означает, что сообщения будут действительны только в текущем и следующем запросах. Если это свойство установлено в false, вы должны самостоятельно заботиться об удалении всплывающих сообщений после их использования. (Это можно сделать, вызвав getFlash с третьим параметром, равным true).
flashes свойство только для чтения (доступно с v1.1.3)
public array getFlashes(boolean $delete=true)
Возвращает все всплывающие сообщения. Этот метод похож на getFlash, за исключением того, что возвращает все доступные в данный момент всплывающие сообщения.
guestName свойство
public string $guestName;
имя для пользователя-гостя. По умолчанию 'Гость'. Используется методом getName, когда текущий пользователь гость (не авторизован).
id свойство
public mixed getId()
public void setId(mixed $value)
Возвращает значение, которое уникально идентифицирует пользователя.
identityCookie свойство
public array $identityCookie;
значения свойств (в парах имя-значение), используемые для инициализации куки пользователя. Можно инициализировать любое свойство из CHttpCookie. Это свойство эффективно только если allowAutoLogin равно true.
isGuest свойство только для чтения
public boolean getIsGuest()
Возвращает значение, указывающее, является ли пользователь гостем (не авторизован).
loginRequiredAjaxResponse свойство (доступно с v1.1.9)
public string $loginRequiredAjaxResponse;
значение, которое будет выведено в случае истечения сессии пользователя во время ajax-запроса. Когда происходит запрос и сессия пользователя истекла, loginRequired перенаправляет на loginUrl для входа в систему. Если это происходит во время ajax-запроса, вся HTML-страница входа в систему возвращается в результате этого ajax-запроса. Это может быть проблемой, если ajax-запрос ожидает получить массив json или определённую строку, так как страница входа в систему в этом случае игнорируется. Чтобы решить эту проблему, установите это свойство в желаемое возвращаемое значение.
Если это свойство установлено, это значение будет возвращено в результате ajax-запроса в случае истечения сессии пользователя.
См. также
loginUrl свойство
public string|array $loginUrl;
URL для входа в систему. Если используется массив, первый элемент должен быть маршрутом к действию входа в систему, а остальные пары имя-значение — параметрами GET для построения URL входа в систему (например, массив('/site/login')). Если это свойство равно null, вместо этого будет вызвано исключение 403 HTTP.
См. также
name свойство
public string getName()
public void setName(string $value)
Возвращает уникальный идентификатор пользователя (например, имя пользователя). Это уникальный идентификатор, который в основном используется для отображения.
returnUrl свойство
public string getReturnUrl(string $defaultUrl=NULL)
public void setReturnUrl(string $value)
Возвращает URL, на который должен быть перенаправлен пользователь после успешного входа в систему. Это свойство обычно используется действием входа в систему. Если вход успешен, действие должно считать это свойство и использовать его для перенаправления пользователя в браузере.
См. также
stateKeyPrefix свойство
public string getStateKeyPrefix()
public void setStateKeyPrefix(string $value)
префикс для имени переменных сессии, хранящих данные сессии пользователя.
Подробное описание методов
__get() метод
public mixed __get(string $name) | ||
| $name | строка | имя свойства |
| {return} | смешанное | значение свойства |
public function __get($name)
{
if($this->hasState($name))
return $this->getState($name);
else
return parent::__get($name);
}
Магический метод PHP. Этот метод переопределен для того, чтобы постоянные состояния можно было получать как свойства.
__isset() метод
public boolean __isset(string $name) | ||
| $name | строка | имя свойства |
| {return} | логическое | |
public function __isset($name)
{
if($this->hasState($name))
return $this->getState($name)!==null;
else
return parent::__isset($name);
}
Магический метод PHP. Этот метод переопределен, чтобы проверять постоянные состояния на null.
__set() метод
public void __set(string $name, mixed $value) | ||
| $name | строка | имя свойства |
| $value | смешанное | значение свойства |
public function __set($name,$value)
{
if($this->hasState($name))
$this->setState($name,$value);
else
parent::__set($name,$value);
}
Магический метод PHP. Этот метод переопределен, чтобы устанавливать постоянные состояния как свойства.
__unset() метод
public void __unset(string $name) | ||
| $name | строка | имя свойства |
public function __unset($name)
{
if($this->hasState($name))
$this->setState($name,null);
else
parent::__unset($name);
}
Магический метод PHP. Этот метод переопределен для удаления постоянных состояний.
afterLogin() метод (доступно с v1.1.3)
protected void afterLogin(boolean $fromCookie) | ||
| $fromCookie | логическое | если вход основан на куках. |
protected function afterLogin($fromCookie)
{
}
Этот метод вызывается после успешного входа пользователя. Вы можете переопределить этот метод для выполнения постобработки (например, записи IP и времени входа пользователя; загрузки информации о правах пользователя).
afterLogout() метод (доступно с v1.1.3)
protected void afterLogout() |
Этот метод вызывается сразу после выхода пользователя. Вы можете переопределить этот метод, чтобы выполнить дополнительные операции по очистке для пользователя.
beforeLogin() метод (доступно с v1.1.3)
protected boolean beforeLogin(mixed $id, array $states, boolean $fromCookie) | ||
| $id | смешанное | Идентификатор пользователя. То же, что возвращается методом getId(). |
| $states | массив | набор пар имя-значение, предоставленных идентификатором пользователя. |
| $fromCookie | логическое | если вход основан на куках |
| {return} | логическое | должен ли пользователь войти в систему |
protected function beforeLogin($id,$states,$fromCookie)
{
return true;
}
Этот метод вызывается перед входом пользователя в систему. Вы можете переопределить этот метод, чтобы добавить дополнительную проверку безопасности. Например, при аутентификации по куки, вы можете проверить, что идентификатор пользователя вместе со случайным токеном в состоянии присутствует в базе данных. Это предотвратит хакеров от подделки произвольных куки-файлов идентификации, даже если они взломают закрытый ключ сервера.
beforeLogout() метод (доступен начиная с v1.1.3)
protected boolean beforeLogout() | ||
| {return} | boolean | необходимо ли выйти из системы для пользователя |
protected function beforeLogout()
{
return true;
}
Этот метод вызывается при вызове logout для выхода пользователя из системы. Если этот метод возвращает false, действие выхода будет отменено. Вы можете переопределить этот метод, чтобы добавить дополнительную проверку перед выходом пользователя из системы.
changeIdentity() метод
protected void changeIdentity(mixed $id, string $name, array $states) | ||
| $id | mixed | уникальный идентификатор пользователя |
| $name | string | имя пользователя для отображения |
| $states | array | состояния идентификации |
protected function changeIdentity($id,$name,$states)
{
Yii::app()->getSession()->regenerateID(true);
$this->setId($id);
$this->setName($name);
$this->loadIdentityStates($states);
}
Изменяет текущего пользователя с указанной информацией об идентификации. Этот метод вызывается login и restoreFromCookie, когда текущий пользователь должен быть заполнен соответствующей информацией об идентификации. Производные классы могут переопределить этот метод, чтобы получить дополнительную информацию, связанную с пользователем. Убедитесь, что сначала вызывается родительская реализация.
checkAccess() метод
public boolean checkAccess(string $operation, array $params=array ( ), boolean $allowCaching=true) | ||
| $operation | string | название операции, для которой требуется проверка доступа. |
| $params | array | параметры имя-значение, которые будут переданы бизнес-правилам, связанным с задачами и ролями, назначенными пользователю. Начиная с версии 1.1.11 в этот массив добавлен параметр с именем 'userId', содержащий значение getId(), когда используется CDbAuthManager или CPhpAuthManager. |
| $allowCaching | boolean | разрешить кэширование результата проверки доступа. Если этот параметр равен true (по умолчанию), если проверка доступа к операции была выполнена ранее, её результат будет возвращён непосредственно при вызове этого метода для проверки той же операции. Если этот параметр равен false, этот метод всегда вызовет CAuthManager::checkAccess, чтобы получить актуальный результат доступа. Обратите внимание, что этот кеширование эффективен только в рамках одного запроса и работает только когда $params=array(). |
| {return} | boolean | можно ли выполнить операцию этому пользователю. |
public function checkAccess($operation,$params=array(),$allowCaching=true)
{
if($allowCaching && $params===array() && isset($this->_access[$operation]))
return $this->_access[$operation];
$access=Yii::app()->getAuthManager()->checkAccess($operation,$this->getId(),$params);
if($allowCaching && $params===array())
$this->_access[$operation]=$access;
return $access;
}
Производит проверку доступа для данного пользователя.
clearStates() метод
public void clearStates() |
public function clearStates()
{
$keys=array_keys($_SESSION);
$prefix=$this->getStateKeyPrefix();
$n=strlen($prefix);
foreach($keys as $key)
{
if(!strncmp($key,$prefix,$n))
unset($_SESSION[$key]);
}
}
Очищает всю информацию об идентификации пользователя из постоянного хранилища. Это удалит данные, сохранённые с помощью setState.
createIdentityCookie() метод
protected CHttpCookie createIdentityCookie(string $name) | ||
| $name | string | имя куки |
| {return} | CHttpCookie | куки, используемые для хранения информации об идентификации |
protected function createIdentityCookie($name)
{
$cookie=new CHttpCookie($name,'');
if(is_array($this->identityCookie))
{
foreach($this->identityCookie as $name=>$value)
$cookie->$name=$value;
}
return $cookie;
}
Создаёт куки для хранения информации об идентификации.
getFlash() метод
public mixed getFlash(string $key, mixed $defaultValue=NULL, boolean $delete=true) | ||
| $key | string | ключ, идентифицирующий сообщение флэша |
| $defaultValue | mixed | значение, которое будет возвращено, если сообщение флэша недоступно. |
| $delete | boolean | удалить ли это сообщение флэша после доступа к нему. По умолчанию true. |
| {return} | mixed | сообщение флэша |
public function getFlash($key,$defaultValue=null,$delete=true)
{
$value=$this->getState(self::FLASH_KEY_PREFIX.$key,$defaultValue);
if($delete)
$this->setFlash($key,null);
return $value;
}
Возвращает сообщение флэша. Сообщение флэша доступно только в текущем и следующем запросах.
getFlashes() метод (доступен начиная с v1.1.3)
public array getFlashes(boolean $delete=true) | ||
| $delete | boolean | удалить ли сообщения флэша после вызова этого метода. |
| {return} | array | сообщения флэша (ключ => сообщение). |
public function getFlashes($delete=true)
{
$flashes=array();
$prefix=$this->getStateKeyPrefix().self::FLASH_KEY_PREFIX;
$keys=array_keys($_SESSION);
$n=strlen($prefix);
foreach($keys as $key)
{
if(!strncmp($key,$prefix,$n))
{
$flashes[substr($key,$n)]=$_SESSION[$key];
if($delete)
unset($_SESSION[$key]);
}
}
if($delete)
$this->setState(self::FLASH_COUNTERS,array());
return $flashes;
}
Возвращает все сообщения флэша. Этот метод похож на getFlash, за исключением того, что он возвращает все доступные в данный момент сообщения флэша.
getId() метод
public mixed getId() | ||
| {return} | mixed | уникальный идентификатор пользователя. Если null, это означает, что пользователь гость. |
public function getId()
{
return $this->getState('__id');
}
Возвращает значение, уникально представляющее пользователя.
getIsGuest() метод
public boolean getIsGuest() | ||
| {return} | boolean | является ли текущий пользователь приложения гостем. |
public function getIsGuest()
{
return $this->getState('__id')===null;
}
Возвращает значение, указывающее, является ли пользователь гостем (не аутентифицирован).
getName() метод
public string getName() | ||
| {return} | string | имя пользователя. Если пользователь не вошёл в систему, это будет guestName. |
public function getName()
{
if(($name=$this->getState('__name'))!==null)
return $name;
else
return $this->guestName;
}
Возвращает уникальный идентификатор пользователя (например, имя пользователя). Это уникальный идентификатор, который в основном используется для отображения.
getReturnUrl() метод
public string getReturnUrl(string $defaultUrl=NULL) | ||
| $defaultUrl | string | адрес возврата по умолчанию в случае, если он не был установлен ранее. Если это null, URL входа в приложение будет рассматриваться как адрес возврата по умолчанию. |
| {return} | string | URL, на который пользователь должен быть перенаправлен после входа в систему. |
public function getReturnUrl($defaultUrl=null)
{
if($defaultUrl===null)
{
$defaultReturnUrl=Yii::app()->getUrlManager()->showScriptName ? Yii::app()->getRequest()->getScriptUrl() : Yii::app()->getRequest()->getBaseUrl().'/';
}
else
{
$defaultReturnUrl=CHtml::normalizeUrl($defaultUrl);
}
return $this->getState('__returnUrl',$defaultReturnUrl);
}
Возвращает URL, на который пользователь должен быть перенаправлен после успешного входа в систему. Это свойство обычно используется действием входа в систему. Если вход в систему успешен, действие должно прочитать это свойство и использовать его для перенаправления браузера пользователя.
См. также
getState() метод
public mixed getState(string $key, mixed $defaultValue=NULL) | ||
| $key | строка | имя переменной |
| $defaultValue | смешанный тип | значение по умолчанию |
| {return} | смешанный тип | значение переменной. Если оно не существует в сессии, будет возвращено предоставленное значение по умолчанию |
public function getState($key,$defaultValue=null)
{
$key=$this->getStateKeyPrefix().$key;
return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;
}
Возвращает значение переменной, хранящейся в сессии пользователя.
Эта функция предназначена для использования классами-наследниками CWebUser, которые хотят хранить дополнительную информацию о пользователе в сессии пользователя. Переменная, если хранится в сессии пользователя с помощью setState, может быть получена обратно с помощью этой функции.
См. также
getStateKeyPrefix() метод
public string getStateKeyPrefix() | ||
| {return} | строка | префикс для имени переменных сессии, хранящих данные сессии пользователя. |
public function getStateKeyPrefix()
{
if($this->_keyPrefix!==null)
return $this->_keyPrefix;
else
return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId());
}
hasFlash() метод
public boolean hasFlash(string $key) | ||
| $key | строка | ключ, идентифицирующий всплывающее сообщение |
| {return} | булево | существует ли указанное всплывающее сообщение |
public function hasFlash($key)
{
return $this->getFlash($key, null, false)!==null;
}
hasState() метод
public boolean hasState(string $key) | ||
| $key | строка | имя состояния |
| {return} | булево | существует ли состояние с указанным именем. |
public function hasState($key)
{
$key=$this->getStateKeyPrefix().$key;
return isset($_SESSION[$key]);
}
Возвращает значение, указывающее, существует ли состояние с указанным именем.
init() метод
public void init() |
public function init()
{
parent::init();
Yii::app()->getSession()->open();
if($this->getIsGuest() && $this->allowAutoLogin)
$this->restoreFromCookie();
elseif($this->autoRenewCookie && $this->allowAutoLogin)
$this->renewCookie();
if($this->autoUpdateFlash)
$this->updateFlash();
$this->updateAuthStatus();
}
Инициализирует компонент приложения. Этот метод переопределяет реализацию родительского класса, запуская сеанс, выполняя аутентификацию на основе cookie (если включена), и обновляя переменные всплывающих сообщений.
loadIdentityStates() метод
protected void loadIdentityStates(array $states) | ||
| $states | массив | состояния идентификатора |
protected function loadIdentityStates($states)
{
$names=array();
if(is_array($states))
{
foreach($states as $name=>$value)
{
$this->setState($name,$value);
$names[$name]=true;
}
}
$this->setState(self::STATES_VAR,$names);
}
Загружает состояния идентификатора из массива и сохраняет их в постоянном хранилище.
login() метод
public boolean login(IUserIdentity $identity, integer $duration=0) | ||
| $identity | IUserIdentity | идентификатор пользователя (который уже должен быть аутентифицирован) |
| $duration | целое число | количество секунд, в течение которых пользователь может оставаться в состоянии входа в систему. По умолчанию 0, что означает вход до тех пор, пока пользователь не закроет браузер. Если больше 0, будет использоваться вход на основе cookie. В этом случае allowAutoLogin должен быть установлен в true, в противном случае будет выброшено исключение. |
| {return} | булево | войден ли пользователь |
public function login($identity,$duration=0)
{
$id=$identity->getId();
$states=$identity->getPersistentStates();
if($this->beforeLogin($id,$states,false))
{
$this->changeIdentity($id,$identity->getName(),$states);
if($duration>0)
{
if($this->allowAutoLogin)
$this->saveToCookie($duration);
else
throw new CException(Yii::t('yii','{class}.allowAutoLogin must be set true in order to use cookie-based authentication.',
array('{class}'=>get_class($this))));
}
if ($this->absoluteAuthTimeout)
$this->setState(self::AUTH_ABSOLUTE_TIMEOUT_VAR, time()+$this->absoluteAuthTimeout);
$this->afterLogin(false);
}
return !$this->getIsGuest();
}
Производит вход пользователя.
Информация об идентификаторе пользователя будет сохранена в хранилище, которое сохраняется в течение сессии пользователя. По умолчанию хранилище — это просто хранилище сессии. Если параметр duration больше 0, будет отправлен cookie для подготовки к входу на основе cookie в будущем.
Обратите внимание, что вы должны установить allowAutoLogin в значение true, если хотите разрешить аутентификацию пользователя на основе информации cookie.
loginRequired() метод
public void loginRequired() |
public function loginRequired()
{
$app=Yii::app();
$request=$app->getRequest();
if(!$request->getIsAjaxRequest())
{
$this->setReturnUrl($request->getUrl());
if(($url=$this->loginUrl)!==null)
{
if(is_array($url))
{
$route=isset($url[0]) ? $url[0] : $app->defaultController;
$url=$app->createUrl($route,array_splice($url,1));
}
$request->redirect($url);
}
}
elseif(isset($this->loginRequiredAjaxResponse))
{
echo $this->loginRequiredAjaxResponse;
Yii::app()->end();
}
throw new CHttpException(403,Yii::t('yii','Login Required'));
}
Перенаправляет браузер пользователя на страницу входа в систему. Перед перенаправлением текущий URL (если это не URL AJAX) будет сохранён в returnUrl, чтобы браузер пользователя мог быть перенаправлен обратно на текущую страницу после успешного входа в систему. Убедитесь, что вы установили loginUrl, чтобы браузер пользователя мог быть перенаправлен на указанный URL входа после вызова этого метода. После вызова этого метода обработка текущего запроса будет завершена.
logout() метод
public void logout(boolean $destroySession=true) | ||
| $destroySession | булево | необходимо ли уничтожить всю сессию. По умолчанию true. Если false, то вызывается clearStates, который удаляет только данные, сохранённые с помощью setState. |
public function logout($destroySession=true)
{
if($this->beforeLogout())
{
if($this->allowAutoLogin)
{
Yii::app()->getRequest()->getCookies()->remove($this->getStateKeyPrefix());
if($this->identityCookie!==null)
{
$cookie=$this->createIdentityCookie($this->getStateKeyPrefix());
$cookie->value=null;
$cookie->expire=0;
Yii::app()->getRequest()->getCookies()->add($cookie->name,$cookie);
}
}
if($destroySession)
Yii::app()->getSession()->destroy();
else
$this->clearStates();
$this->_access=array();
$this->afterLogout();
}
}
Выходит из системы текущего пользователя. Это удалит данные сессии, относящиеся к аутентификации. Если параметр равен true, вся сессия будет уничтожена также.
renewCookie() метод (доступен с версии v1.1.3)
protected void renewCookie() |
protected function renewCookie()
{
$request=Yii::app()->getRequest();
$cookies=$request->getCookies();
$cookie=$cookies->itemAt($this->getStateKeyPrefix());
if($cookie && !empty($cookie->value) && ($data=Yii::app()->getSecurityManager()->validateData($cookie->value))!==false)
{
$data=@unserialize($data);
if(is_array($data) && isset($data[0],$data[1],$data[2],$data[3]))
{
$this->saveToCookie($data[2]);
}
}
}
Обновляет cookie идентификатора. Этот метод установит время истечения срока действия cookie идентификатора в текущее время плюс первоначально указанный срок действия cookie.
restoreFromCookie() метод
protected void restoreFromCookie() |
protected function restoreFromCookie()
{
$app=Yii::app();
$request=$app->getRequest();
$cookie=$request->getCookies()->itemAt($this->getStateKeyPrefix());
if($cookie && !empty($cookie->value) && is_string($cookie->value) && ($data=$app->getSecurityManager()->validateData($cookie->value))!==false)
{
$data=@unserialize($data);
if(is_array($data) && isset($data[0],$data[1],$data[2],$data[3]))
{
list($id,$name,$duration,$states)=$data;
if($this->beforeLogin($id,$states,true))
{
$this->changeIdentity($id,$name,$states);
if($this->autoRenewCookie)
{
$this->saveToCookie($duration);
}
$this->afterLogin(true);
}
}
}
}
Заполняет текущий объект пользователя информацией, полученной из cookie. Этот метод используется при автоматическом входе (allowAutoLogin) включен. Информация об идентификаторе пользователя извлекается из cookie. Используются достаточные меры безопасности, чтобы предотвратить несанкционированное изменение данных cookie.
См. также
saveIdentityStates() метод
protected array saveIdentityStates() | ||
| {return} | массив | состояния идентификатора |
protected function saveIdentityStates()
{
$states=array();
foreach($this->getState(self::STATES_VAR,array()) as $name=>$dummy)
$states[$name]=$this->getState($name);
return $states;
}
Извлекает состояния идентификатора из постоянного хранилища и сохраняет их в виде массива.
saveToCookie() метод
protected void saveToCookie(integer $duration) | ||
| $duration | целое число | количество секунд, в течение которых пользователь может оставаться в состоянии входа в систему. По умолчанию 0, что означает вход до тех пор, пока пользователь не закроет браузер. |
protected function saveToCookie($duration)
{
$app=Yii::app();
$cookie=$this->createIdentityCookie($this->getStateKeyPrefix());
$cookie->expire=time()+$duration;
$data=array(
$this->getId(),
$this->getName(),
$duration,
$this->saveIdentityStates(),
);
$cookie->value=$app->getSecurityManager()->hashData(serialize($data));
$app->getRequest()->getCookies()->add($cookie->name,$cookie);
}
Сохраняет необходимые данные пользователя в cookie. Этот метод используется при включенном автоматическом входе (allowAutoLogin). Данный метод сохраняет идентификатор пользователя, имя пользователя, другие состояния аутентификации и ключ проверки в cookie. Эта информация используется для аутентификации при следующем посещении приложения пользователем.
См. также
setFlash() метод
public void setFlash(string $key, mixed $value, mixed $defaultValue=NULL) | ||
| $key | строка | ключ, идентифицирующий сообщение всплывающей подсказки |
| $value | смешанный тип | сообщение всплывающей подсказки |
| $defaultValue | смешанный тип | если это значение совпадает с сообщением всплывающей подсказки, сообщение будет удалено. (Поэтому можно использовать setFlash('key',null) для удаления сообщения всплывающей подсказки.) |
public function setFlash($key,$value,$defaultValue=null)
{
$this->setState(self::FLASH_KEY_PREFIX.$key,$value,$defaultValue);
$counters=$this->getState(self::FLASH_COUNTERS,array());
if($value===$defaultValue)
unset($counters[$key]);
else
$counters[$key]=0;
$this->setState(self::FLASH_COUNTERS,$counters,array());
}
Сохраняет сообщение всплывающей подсказки. Сообщение всплывающей подсказки доступно только в текущем и последующих запросах.
setId() метод
public void setId(mixed $value) | ||
| $value | смешанный тип | уникальный идентификатор пользователя. Если null, значит пользователь гость. |
public function setId($value)
{
$this->setState('__id',$value);
}
setName() метод
public void setName(string $value) | ||
| $value | строка | имя пользователя. |
public function setName($value)
{
$this->setState('__name',$value);
}
Устанавливает уникальный идентификатор пользователя (например, имя пользователя).
См. также
setReturnUrl() метод
public void setReturnUrl(string $value) | ||
| $value | строка | URL, на который должен быть перенаправлен пользователь после входа. |
public function setReturnUrl($value)
{
$this->setState('__returnUrl',$value);
}
setState() метод
public void setState(string $key, mixed $value, mixed $defaultValue=NULL) | ||
| $key | строка | имя переменной |
| $value | смешанный тип | значение переменной |
| $defaultValue | смешанный тип | значение по умолчанию. Если $value===$defaultValue, переменная будет удалена из сессии |
public function setState($key,$value,$defaultValue=null)
{
$key=$this->getStateKeyPrefix().$key;
if($value===$defaultValue)
unset($_SESSION[$key]);
else
$_SESSION[$key]=$value;
}
Сохраняет переменную в сессии пользователя.
Эта функция предназначена для использования наследниками класса CWebUser, которые хотят сохранить дополнительную информацию о пользователе в сессии. Сохраняя переменную с помощью этой функции, её можно позже получить с помощью getState. Переменная будет сохраняться между запросами страницы во время сессии пользователя.
См. также
setStateKeyPrefix() метод
public void setStateKeyPrefix(string $value) | ||
| $value | строка | префикс для имени переменных сессии, хранящих данные сессии пользователя. |
public function setStateKeyPrefix($value)
{
$this->_keyPrefix=$value;
}
updateAuthStatus() метод (доступен начиная с v1.1.7)
protected void updateAuthStatus() |
protected function updateAuthStatus()
{
if(($this->authTimeout!==null || $this->absoluteAuthTimeout!==null) && !$this->getIsGuest())
{
$expires=$this->getState(self::AUTH_TIMEOUT_VAR);
$expiresAbsolute=$this->getState(self::AUTH_ABSOLUTE_TIMEOUT_VAR);
if ($expires!==null && $expires < time() || $expiresAbsolute!==null && $expiresAbsolute < time())
$this->logout(false);
else
$this->setState(self::AUTH_TIMEOUT_VAR,time()+$this->authTimeout);
}
}
Обновляет статус аутентификации в соответствии с authTimeout. Если пользователь был неактивен в течение authTimeout секунд или истекло время {link absoluteAuthTimeout}, он будет автоматически выведен из системы.
updateFlash() метод
protected void updateFlash() |
protected function updateFlash()
{
$counters=$this->getState(self::FLASH_COUNTERS);
if(!is_array($counters))
return;
foreach($counters as $key=>$count)
{
if($count)
{
unset($counters[$key]);
$this->setState(self::FLASH_KEY_PREFIX.$key,null);
}
else
$counters[$key]++;
}
$this->setState(self::FLASH_COUNTERS,$counters,array());
}
Обновляет внутренние счётчики для сообщений всплывающей подсказки. Этот метод используется в классе CWebApplication для поддержания доступности сообщений всплывающей подсказки.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CWebUser