0 关注者

类 yii\web\User

继承yii\web\User » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/web/User.php

User 是用于 user 应用程序组件的类,该组件管理用户的身份验证状态。

可以使用 $isGuest 来确定当前用户是否是访客。如果用户是访客,则 $identity 属性将返回 null。否则,它将是 yii\web\IdentityInterface 的实例。

可以调用各种方法来更改用户的身份验证状态。

  • login():设置指定的身份,并在会话和 Cookie 中记住身份验证状态;
  • logout():将用户标记为访客,并从会话和 Cookie 中清除相关信息;
  • setIdentity():更改用户身份,而不触及会话或 Cookie(这最适合在无状态 RESTful API 实现中使用)。

请注意,User 只维护用户的身份验证状态。它不会处理如何验证用户。如何验证用户的逻辑应该在实现 yii\web\IdentityInterface 的类中完成。还需要设置 $identityClass,其中包含此类的名称。

User 默认情况下在 yii\web\Application 中配置为应用程序组件。可以通过 Yii::$app->user 访问该实例。

可以通过在应用程序配置文件中添加一个数组到 components 下来修改其配置,如下面的示例所示

'user' => [
    'identityClass' => 'app\models\User', // User must implement the IdentityInterface
    'enableAutoLogin' => true,
    // 'loginUrl' => ['user/login'],
    // ...
]

公共属性

隐藏继承的属性

属性 类型 描述 定义来源
$absoluteAuthTimeout 整数| 用户将自动注销的秒数,无论活动情况如何。 yii\web\User
$absoluteAuthTimeoutParam 字符串 用于存储身份验证状态绝对过期时间戳的会话变量名称。 yii\web\User
$acceptableRedirectTypes 数组 此组件应重定向到 $loginUrl 的 MIME 类型。 yii\web\User
$accessChecker yii\rbac\CheckAccessInterface|字符串|数组| 用于检查访问权限的访问检查器对象,或访问检查器的应用程序组件 ID。 yii\web\User
$authKeyParam 字符串 用于存储身份验证密钥的会话变量名称。 yii\web\User
$authTimeout 整数| 用户在保持不活动状态时将自动注销的秒数。 yii\web\User
$authTimeoutParam 字符串 用于存储身份验证状态过期时间戳的会话变量名称。 yii\web\User
$autoRenewCookie 布尔值 是否在每次请求页面时自动更新身份 Cookie。 yii\web\User
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$enableAutoLogin 布尔值 是否启用基于 Cookie 的登录。 yii\web\User
$enableSession 布尔值 是否使用会话在多个请求之间持久保存身份验证状态。 yii\web\User
$id 字符串|整数| 用户的唯一标识符。 yii\web\User
$idParam 字符串 用于存储 $id 值的会话变量名称。 yii\web\User
$identity yii\web\IdentityInterface| 与当前登录用户关联的身份对象。 yii\web\User
$identityClass 字符串 $identity 对象的类名。 yii\web\User
$identityCookie 数组 身份 Cookie 的配置。 yii\web\User
$isGuest 布尔值 当前用户是否是访客。 yii\web\User
$loginUrl 字符串|数组| 调用 loginRequired() 时登录的 URL。 yii\web\User
$returnUrl 字符串 用户登录后应重定向到的 URL。 yii\web\User
$returnUrlParam 字符串 用于存储 $returnUrl 值的会话变量名称。 yii\web\User

公共方法

隐藏继承的方法

方法 描述 定义来源
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法是在通过克隆现有对象创建对象后调用的。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查属性是否已设置,即已定义且不为空。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
behaviors() 返回此组件应表现出的行为列表。 yii\base\Component
can() 检查用户是否可以执行由给定权限指定的 operation。 yii\web\User
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
checkRedirectAcceptable() 检查 Accept 头信息是否包含允许重定向到登录页面的内容类型。 yii\web\User
className() 返回此类的完全限定名称。 yii\base\BaseObject
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
ensureBehaviors() 确保 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
getBehavior() 返回命名的行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getId() 返回唯一表示用户的值。 yii\web\User
getIdentity() 返回与当前登录用户关联的身份对象。 yii\web\User
getIsGuest() 返回一个值,指示用户是否是访客(未经身份验证)。 yii\web\User
getReturnUrl() 返回浏览器在成功登录后应重定向到的 URL。 yii\web\User
hasEventHandlers() 返回一个值,指示是否有任何处理程序附加到命名事件。 yii\base\Component
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\Component
hasProperty() 返回一个值,指示是否为此组件定义了属性。 yii\base\Component
init() 初始化应用程序组件。 yii\web\User
login() 登录用户。 yii\web\User
loginByAccessToken() 使用给定的访问令牌登录用户。 yii\web\User
loginRequired() 将用户浏览器重定向到登录页面。 yii\web\User
logout() 注销当前用户。 yii\web\User
off() 从该组件分离现有事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
setIdentity() 设置用户身份对象。 yii\web\User
setReturnUrl() 在会话中记住 URL,以便以后可以通过 getReturnUrl() 检索回来。 yii\web\User
switchIdentity() 切换到当前用户的新的身份。 yii\web\User
trigger() 触发事件。 yii\base\Component

受保护的方法

隐藏继承的方法

方法 描述 定义来源
afterLogin() 该方法在用户成功登录后调用。 yii\web\User
afterLogout() 该方法在用户通过 logout() 注销后立即调用。 yii\web\User
beforeLogin() 该方法在登录用户之前调用。 yii\web\User
beforeLogout() 该方法在调用 logout() 注销用户时调用。 yii\web\User
getAccessChecker() 返回用于检查访问权限的访问检查器。 yii\web\User
getAuthManager() 返回与用户组件关联的授权管理器。 yii\web\User
getIdentityAndDurationFromCookie() 确定身份 cookie 是否具有有效的格式并包含有效的授权密钥。 yii\web\User
loginByCookie() 通过 cookie 登录用户。 yii\web\User
regenerateCsrfToken() 重新生成 CSRF 令牌 yii\web\User
removeIdentityCookie() 删除身份 cookie。 yii\web\User
renewAuthStatus() 使用来自会话和 cookie 的信息更新身份验证状态。 yii\web\User
renewIdentityCookie() 更新身份 cookie。 yii\web\User
sendIdentityCookie() 发送身份 cookie。 yii\web\User

常量

隐藏继承的常量

常量 描述 定义来源
EVENT_AFTER_LOGIN 'afterLogin' yii\web\User
EVENT_AFTER_LOGOUT 'afterLogout' yii\web\User
EVENT_BEFORE_LOGIN 'beforeLogin' yii\web\User
EVENT_BEFORE_LOGOUT 'beforeLogout' yii\web\User

属性详细信息

隐藏继承的属性

$absoluteAuthTimeout 公共属性

用户将自动注销的秒数,无论活动如何。请注意,如果 $enableAutoLogintrue,则此功能无效。

$absoluteAuthTimeoutParam 公共属性

用于存储已认证状态的绝对过期时间戳值的会话变量名称。当 $absoluteAuthTimeout 设置时使用。

public string $absoluteAuthTimeoutParam '__absoluteExpire'
$acceptableRedirectTypes 公共属性 (自版本 2.0.8 开始可用)

此组件应重定向到 $loginUrl 的 MIME 类型。

public array $acceptableRedirectTypes = [
    
'text/html',
    
'application/xhtml+xml',
]
$accessChecker 公共属性 (自版本 2.0.9 开始可用)

用于检查访问权限的访问检查器对象,或者访问检查器的应用程序组件 ID。如果未设置,将使用应用程序授权管理器。

$authKeyParam 公共属性 (自版本 2.0.41 开始可用)

用于存储身份验证密钥的会话变量名称。

public string $authKeyParam '__authKey'
$authTimeout 公共属性

如果用户保持不活动状态,用户将自动注销的秒数。如果未设置此属性,则用户将在当前会话过期后注销(参见 yii\web\Session::$timeout)。请注意,如果 $enableAutoLogintrue,则此功能无效。

public integer|null $authTimeout null
$authTimeoutParam 公共属性

用于存储已认证状态的过期时间戳值的会话变量名称。当 $authTimeout 设置时使用。

public string $authTimeoutParam '__expire'
$autoRenewCookie 公共属性

是否在每次请求页面时自动更新身份 cookie。此属性仅在 $enableAutoLogintrue 时有效。当此值为 false 时,身份 cookie 将在用户最初登录后指定持续时间后过期。当此值为 true 时,身份 cookie 将在用户上次访问网站后指定持续时间后过期。

另见 $enableAutoLogin

public boolean $autoRenewCookie true
$enableAutoLogin 公共属性

是否启用基于 cookie 的登录。默认为 false。请注意,如果 $enableSessionfalse,则此属性将被忽略。

public boolean $enableAutoLogin false
$enableSession 公共属性

是否使用会话来跨多个请求持久化身份验证状态。如果您的应用程序是无状态的,则将此属性设置为 false,这在 RESTful API 中很常见。

public boolean $enableSession true
$id 公共属性

用户的唯一标识符。如果为 null,则表示该用户是访客。

public string|integer|null $id null
$idParam 公共属性

用于存储 $id 值的会话变量名称。

public string $idParam '__id'
$identity 公共属性

与当前登录用户关联的身份对象。如果用户未登录(未经过身份验证),则返回 null

$identityClass 公共属性

$identity 对象的类名。

public string $identityClass null
$identityCookie 公共属性

身份 cookie 的配置。此属性仅在 $enableAutoLogintrue 时使用。

另请参见 yii\web\Cookie

public array $identityCookie = [
    
'name' => '_identity',
    
'httpOnly' => true,
]
$isGuest 公共属性

当前用户是否是访客。

public boolean $isGuest null
$loginUrl 公共属性

当调用 loginRequired() 时,用于登录的 URL。如果给定一个数组,将调用 yii\web\UrlManager::createUrl() 来创建相应的 URL。数组的第一个元素应该是登录操作的路由,其余的名称-值对是用于构造登录 URL 的 GET 参数。例如,

['site/login', 'ref' => 1]

如果此属性为 null,则在调用 loginRequired() 时将引发 403 HTTP 异常。

public string|array|null $loginUrl = [
    
'site/login',
]
$returnUrl 公共属性

用户登录后应重定向到的 URL。请注意,此属性的类型在 getter 和 setter 中有所不同。有关详细信息,请参见 getReturnUrl()setReturnUrl()

public string $returnUrl null
$returnUrlParam 公共属性

用于存储 $returnUrl 值的会话变量名称。

public string $returnUrlParam '__returnUrl'

方法详情

隐藏继承的方法

__call() 公共方法

定义于: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查是否有任何附加的行为具有命名的方法,并在可用时执行它。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用它。

public mixed __call ( $name, $params )
$name 字符串

方法名

$params 数组

方法参数

返回值 mixed

方法返回值

抛出 yii\base\UnknownMethodException

当调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定义于: yii\base\Component::__clone()

此方法是在通过克隆现有对象创建对象后调用的。

它会删除所有行为,因为它们附加到旧的对象。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被重写,建议

  • 构造函数的最后一个参数是一个配置数组,如这里的 $config
  • 在构造函数的末尾调用父实现。
public void __construct ( $config = [] )
$config 数组

用于初始化对象属性的键值对

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() 公共方法

定义于: yii\base\Component::__get()

返回组件属性的值。

此方法将按照以下顺序进行检查并相应地执行

  • 由 getter 定义的属性:返回 getter 结果
  • 行为的属性:返回行为属性值

不要直接调用此方法,因为它是 PHP 魔术方法,在执行 $value = $component->property; 时会隐式调用。

另请参见 __set().

public mixed __get ( $name )
$name 字符串

属性名称

返回值 mixed

属性值或行为属性的值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性为只写。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公共方法

定义于: yii\base\Component::__isset()

检查属性是否已设置,即已定义且不为空。

此方法将按照以下顺序进行检查并相应地执行

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

不要直接调用此方法,因为它是 PHP 魔术方法,在执行 isset($component->property) 时会隐式调用。

另请参见 https://php.ac.cn/manual/en/function.isset.php.

public boolean __isset ( $name )
$name 字符串

属性名称或事件名称

返回值 布尔值

命名的属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\Component::__set()

设置组件属性的值。

此方法将按照以下顺序进行检查并相应地执行

  • 由 setter 定义的属性:设置属性值
  • 以 "on xyz" 格式的事件:将处理程序附加到事件 "xyz"
  • 以 "as xyz" 格式的行为:附加名为 "xyz" 的行为
  • 行为的属性:设置行为属性值

不要直接调用此方法,因为它是 PHP 魔术方法,在执行 $component->property = $value; 时会隐式调用。

另请参见 __get().

public void __set ( $name, $value )
$name 字符串

属性名称或事件名称

$value mixed

属性值

抛出 yii\base\UnknownPropertyException

如果未定义属性

抛出 yii\base\InvalidCallException

如果属性为只读。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公共方法

定义于: yii\base\Component::__unset()

将组件属性设置为 null。

此方法将按照以下顺序进行检查并相应地执行

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

不要直接调用此方法,因为它是 PHP 魔术方法,在执行 unset($component->property) 时会隐式调用。

另请参见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name 字符串

属性名称

抛出 yii\base\InvalidCallException

如果属性为只读。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
afterLogin() 受保护方法

该方法在用户成功登录后调用。

默认实现将触发 EVENT_AFTER_LOGIN 事件。如果您重写此方法,请确保调用父实现,以便触发事件。

protected void afterLogin ( $identity, $cookieBased, $duration )
$identity yii\web\IdentityInterface

用户身份信息

$cookieBased 布尔值

登录是否基于 cookie

$duration integer

用户可以保持登录状态的秒数。如果为 0,表示登录到用户关闭浏览器或手动销毁会话。

                protected function afterLogin($identity, $cookieBased, $duration)
{
    $this->trigger(self::EVENT_AFTER_LOGIN, new UserEvent([
        'identity' => $identity,
        'cookieBased' => $cookieBased,
        'duration' => $duration,
    ]));
}

            
afterLogout() 受保护方法

该方法在用户通过 logout() 注销后立即调用。

默认实现将触发 EVENT_AFTER_LOGOUT 事件。如果您重写此方法,请确保调用父实现,以便触发事件。

protected void afterLogout ( $identity )
$identity yii\web\IdentityInterface

用户身份信息

                protected function afterLogout($identity)
{
    $this->trigger(self::EVENT_AFTER_LOGOUT, new UserEvent([
        'identity' => $identity,
    ]));
}

            
attachBehavior() 公共方法

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另请参见 detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name 字符串

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。可以是以下之一

返回值 yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都按其名称索引,应为 yii\base\Behavior 对象,指定行为类的字符串,或用于创建行为的配置数组。

另请参见 attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors 数组

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
beforeLogin() 受保护方法

该方法在登录用户之前调用。

默认实现将触发 EVENT_BEFORE_LOGIN 事件。如果您重写此方法,请确保调用父实现,以便触发事件。

protected boolean beforeLogin ( $identity, $cookieBased, $duration )
$identity yii\web\IdentityInterface

用户身份信息

$cookieBased 布尔值

登录是否基于 cookie

$duration integer

用户可以保持登录状态的秒数。如果为 0,表示登录到用户关闭浏览器或手动销毁会话。

返回值 布尔值

用户是否应该继续登录

                protected function beforeLogin($identity, $cookieBased, $duration)
{
    $event = new UserEvent([
        'identity' => $identity,
        'cookieBased' => $cookieBased,
        'duration' => $duration,
    ]);
    $this->trigger(self::EVENT_BEFORE_LOGIN, $event);
    return $event->isValid;
}

            
beforeLogout() 受保护方法

该方法在调用 logout() 注销用户时调用。

默认实现将触发 EVENT_BEFORE_LOGOUT 事件。如果您覆盖此方法,请确保调用父级实现以触发事件。

受保护 布尔值 beforeLogout ( $identity )
$identity yii\web\IdentityInterface

用户身份信息

返回值 布尔值

用户是否应该继续注销

                protected function beforeLogout($identity)
{
    $event = new UserEvent([
        'identity' => $identity,
    ]);
    $this->trigger(self::EVENT_BEFORE_LOGOUT, $event);
    return $event->isValid;
}

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应表现出的行为列表。

子类可以覆盖此方法来指定它们想要表现的行为。

此方法的返回值应为行为对象的数组或以行为名称为索引的配置数组。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

请注意,行为类必须继承自 yii\base\Behavior。可以使用名称或匿名方式附加行为。当使用名称作为数组键时,可以使用此名称稍后使用 getBehavior() 检索行为,或者使用 detachBehavior() 卸载行为。匿名行为无法检索或卸载。

在此方法中声明的行为将自动附加到组件(按需)。

公共 数组 behaviors ( )
返回值 数组

行为配置。

                public function behaviors()
{
    return [];
}

            
can() 公共方法

检查用户是否可以执行由给定权限指定的 operation。

请注意,您必须配置 "authManager" 应用程序组件才能使用此方法。否则它将始终返回 false。

公共 布尔值 can ( $permissionName, $params [], $allowCaching true )
$permissionName 字符串

需要访问检查的权限的名称(例如,“编辑帖子”)。

$params 数组

将传递给分配给用户的角色和权限相关联的规则的键值对。

$allowCaching 布尔值

是否允许缓存访问检查的结果。当此参数为 true(默认值)时,如果之前执行过操作的访问检查,则在调用此方法检查相同操作时将直接返回其结果。如果此参数为 false,此方法将始终调用 yii\rbac\CheckAccessInterface::checkAccess() 来获取最新的访问结果。请注意,此缓存仅在同一请求内有效,并且仅在 $params = [] 时有效。

返回值 布尔值

用户是否可以执行由给定权限指定的指定操作。

                public function can($permissionName, $params = [], $allowCaching = true)
{
    if ($allowCaching && empty($params) && isset($this->_access[$permissionName])) {
        return $this->_access[$permissionName];
    }
    if (($accessChecker = $this->getAccessChecker()) === null) {
        return false;
    }
    $access = $accessChecker->checkAccess($this->getId(), $permissionName, $params);
    if ($allowCaching && empty($params)) {
        $this->_access[$permissionName] = $access;
    }
    return $access;
}

            
canGetProperty() 公共方法

定义于: yii\base\Component::canGetProperty()

返回一个值,指示是否可以读取属性。

可以读取属性,如果

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有具有指定名称的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有具有给定名称的可读属性(当 $checkBehaviors 为 true 时)。

另请参阅 canSetProperty()

公共 布尔值 canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

是否将行为的属性视为此组件的属性

返回值 布尔值

属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

定义于: yii\base\Component::canSetProperty()

返回一个值,指示是否可以设置属性。

可以写入属性,如果

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有具有指定名称的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有具有给定名称的可写属性(当 $checkBehaviors 为 true 时)。

另请参阅 canGetProperty()

公共 布尔值 canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

是否将行为的属性视为此组件的属性

返回值 布尔值

属性是否可写

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
checkRedirectAcceptable() 公共方法(版本 2.0.8 起可用)

检查 Accept 头信息是否包含允许重定向到登录页面的内容类型。

默认情况下,登录页面假定为提供 text/htmlapplication/xhtml+xml。您可以通过修改 $acceptableRedirectTypes 属性来更改可接受的内容类型。

另请参阅 $acceptableRedirectTypes

公共 布尔值 checkRedirectAcceptable ( )
返回值 布尔值

此请求是否可以重定向到登录页面。

                public function checkRedirectAcceptable()
{
    $acceptableTypes = Yii::$app->getRequest()->getAcceptableContentTypes();
    if (empty($acceptableTypes) || (count($acceptableTypes) === 1 && array_keys($acceptableTypes)[0] === '*/*')) {
        return true;
    }
    foreach ($acceptableTypes as $type => $params) {
        if (in_array($type, $this->acceptableRedirectTypes, true)) {
            return true;
        }
    }
    return false;
}

            
className() 公共静态方法
自 2.0.14 起已弃用。在 PHP >=5.5 上,使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

公共静态 字符串 className ( )
返回值 字符串

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

公共 yii\base\Behavior| detachBehavior ( $name )
$name 字符串

行为的名称。

返回值 yii\base\Behavior|

已卸载的行为。如果行为不存在,则为空。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

公共 detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保 behaviors() 中声明的行为已附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
getAccessChecker() 受保护方法 (自版本 2.0.9 起可用)

返回用于检查访问权限的访问检查器。

protected yii\rbac\CheckAccessInterface getAccessChecker ( )

                protected function getAccessChecker()
{
    return $this->accessChecker !== null ? $this->accessChecker : $this->getAuthManager();
}

            
getAuthManager() 受保护方法 (自版本 2.0.6 起可用)
自版本 2.0.9 起弃用,将在 2.1 中移除。请使用 getAccessChecker() 代替。

返回与用户组件关联的授权管理器。

默认情况下,此方法返回 authManager 应用组件。您可能需要根据需要重写此方法以返回不同的授权管理器实例。

protected yii\rbac\ManagerInterface getAuthManager ( )

                protected function getAuthManager()
{
    return Yii::$app->getAuthManager();
}

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name 字符串

行为名称

返回值 yii\base\Behavior|

行为对象,如果行为不存在则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getId() 公共方法

返回唯一表示用户的值。

另请参阅 getIdentity().

public string|integer|null getId ( )
返回值 字符串|整数|

用户的唯一标识符。如果为 null,则表示该用户是访客。

                public function getId()
{
    $identity = $this->getIdentity();
    return $identity !== null ? $identity->getId() : null;
}

            
getIdentity() 公共方法

返回与当前登录用户关联的身份对象。

$enableSession 为 true 时,此方法可能会尝试读取存储在会话中的用户身份验证数据,并重建相应的身份对象,如果之前没有这样做的话。

另请参阅

public yii\web\IdentityInterface|null getIdentity ( $autoRenew true )
$autoRenew 布尔值

是否自动更新身份验证状态,如果之前没有这样做的话。这只有在 $enableSession 为 true 时才有用。

返回值 yii\web\IdentityInterface|

与当前登录用户关联的身份对象。如果用户未登录(未经过身份验证),则返回 null

                public function getIdentity($autoRenew = true)
{
    if ($this->_identity === false) {
        if ($this->enableSession && $autoRenew) {
            try {
                $this->_identity = null;
                $this->renewAuthStatus();
            } catch (\Exception $e) {
                $this->_identity = false;
                throw $e;
            } catch (\Throwable $e) {
                $this->_identity = false;
                throw $e;
            }
        } else {
            return null;
        }
    }
    return $this->_identity;
}

            
getIdentityAndDurationFromCookie() 受保护方法 (自版本 2.0.9 起可用)

确定身份 cookie 是否具有有效的格式并包含有效的授权密钥。

$enableAutoLogin 为 true 时,此方法被使用。此方法尝试使用身份 Cookie 中的信息来验证用户。

另请参阅 loginByCookie().

protected array|null getIdentityAndDurationFromCookie ( )
返回值 array|null

如果有效,则返回一个包含 'identity' 和 'duration' 的数组,否则返回 null。

                protected function getIdentityAndDurationFromCookie()
{
    $value = Yii::$app->getRequest()->getCookies()->getValue($this->identityCookie['name']);
    if ($value === null) {
        return null;
    }
    $data = json_decode($value, true);
    if (is_array($data) && count($data) == 3) {
        list($id, $authKey, $duration) = $data;
        /* @var $class IdentityInterface */
        $class = $this->identityClass;
        $identity = $class::findIdentity($id);
        if ($identity !== null) {
            if (!$identity instanceof IdentityInterface) {
                throw new InvalidValueException("$class::findIdentity() must return an object implementing IdentityInterface.");
            } elseif (!$identity->validateAuthKey($authKey)) {
                $ip = Yii::$app->getRequest()->getUserIP();
                Yii::warning("Invalid cookie auth key attempted for user '$id' from $ip: $authKey", __METHOD__);
            } else {
                return ['identity' => $identity, 'duration' => $duration];
            }
        }
    }
    $this->removeIdentityCookie();
    return null;
}

            
getIsGuest() 公共方法

返回一个值,指示用户是否是访客(未经身份验证)。

另请参阅 getIdentity().

public boolean getIsGuest ( )
返回值 布尔值

当前用户是否是访客。

                public function getIsGuest()
{
    return $this->getIdentity() === null;
}

            
getReturnUrl() 公共方法

返回浏览器在成功登录后应重定向到的 URL。

此方法从会话中读取返回 URL。它通常由登录操作调用,登录操作可能会调用此方法来将浏览器重定向到成功身份验证后的位置。

另请参阅 loginRequired().

public string getReturnUrl ( $defaultUrl null )
$defaultUrl 字符串|数组|

如果之前未设置返回 URL,则为默认返回 URL。如果此值为 null 并且之前未设置返回 URL,则将重定向到 yii\web\Application::$homeUrl。请参考 setReturnUrl() 关于 URL 的接受格式。

返回值 字符串

用户登录后应重定向到的 URL。

                public function getReturnUrl($defaultUrl = null)
{
    $url = Yii::$app->getSession()->get($this->returnUrlParam, $defaultUrl);
    if (is_array($url)) {
        if (isset($url[0])) {
            return Yii::$app->getUrlManager()->createUrl($url);
        }
        $url = null;
    }
    return $url === null ? Yii::$app->getHomeUrl() : $url;
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否有任何处理程序附加到命名事件。

public boolean hasEventHandlers ( $name )
$name 字符串

事件名称

返回值 布尔值

是否有任何处理程序附加到该事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公共方法

定义于: yii\base\Component::hasMethod()

返回一个值,指示是否定义了方法。

如果方法被定义,则

  • 该类具有具有指定名称的方法
  • 附加的行为具有具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name 字符串

属性名称

$checkBehaviors 布尔值

是否将行为的方法视为此组件的方法

返回值 布尔值

该方法是否已定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

定义于: yii\base\Component::hasProperty()

返回一个值,指示是否为此组件定义了属性。

如果定义了一个属性,则

  • 该类将具有与指定名称关联的 getter 或 setter 方法(在本例中,属性名称不区分大小写);
  • 该类具有具有指定名称的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的属性(当 $checkBehaviors 为 true 时)。

另请参阅

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name 字符串

属性名称

$checkVars 布尔值

是否将成员变量视为属性

$checkBehaviors 布尔值

是否将行为的属性视为此组件的属性

返回值 布尔值

属性是否已定义

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() 公共方法

初始化应用程序组件。

public void init ( )

                public function init()
{
    parent::init();
    if ($this->identityClass === null) {
        throw new InvalidConfigException('User::identityClass must be set.');
    }
    if ($this->enableAutoLogin && !isset($this->identityCookie['name'])) {
        throw new InvalidConfigException('User::identityCookie must contain the "name" element.');
    }
    if ($this->accessChecker !== null) {
        $this->accessChecker = Instance::ensure($this->accessChecker, '\yii\rbac\CheckAccessInterface');
    }
}

            
login() 公共方法

登录用户。

登录用户后

  • 可以通过 $identity 属性获取用户的身份信息

如果 $enableSessiontrue

  • 身份信息将存储在会话中,并在下一次请求中可用
  • 如果 $duration == 0:只要会话处于活动状态或用户关闭浏览器
  • 如果 $duration > 0:只要会话处于活动状态或只要 cookie 通过其 $duration(以秒为单位)保持有效,前提是 $enableAutoLogin 设置为 true

如果 $enableSessionfalse

  • $duration 参数将被忽略
public boolean login ( yii\web\IdentityInterface $identity, $duration 0 )
$identity yii\web\IdentityInterface

用户身份(应该已经通过身份验证)

$duration integer

用户可以保持登录状态的秒数,默认为 0

返回值 布尔值

用户是否已登录

                public function login(IdentityInterface $identity, $duration = 0)
{
    if ($this->beforeLogin($identity, false, $duration)) {
        $this->switchIdentity($identity, $duration);
        $id = $identity->getId();
        $ip = Yii::$app->getRequest()->getUserIP();
        if ($this->enableSession) {
            $log = "User '$id' logged in from $ip with duration $duration.";
        } else {
            $log = "User '$id' logged in from $ip. Session not enabled.";
        }
        $this->regenerateCsrfToken();
        Yii::info($log, __METHOD__);
        $this->afterLogin($identity, false, $duration);
    }
    return !$this->getIsGuest();
}

            
loginByAccessToken() 公共方法

使用给定的访问令牌登录用户。

此方法将首先通过调用 yii\web\IdentityInterface::findIdentityByAccessToken() 来使用提供的访问令牌对用户进行身份验证。如果成功,它将调用 login() 来登录已验证的用户。如果身份验证失败或 login() 不成功,它将返回 null。

public yii\web\IdentityInterface|null loginByAccessToken ( $token, $type null )
$token 字符串

访问令牌

$type mixed

令牌的类型。此参数的值取决于实现。例如,yii\filters\auth\HttpBearerAuth 将设置此参数为 yii\filters\auth\HttpBearerAuth

返回值 yii\web\IdentityInterface|

与给定访问令牌关联的身份。如果访问令牌无效或 login() 不成功,则返回 Null。

                public function loginByAccessToken($token, $type = null)
{
    /* @var $class IdentityInterface */
    $class = $this->identityClass;
    $identity = $class::findIdentityByAccessToken($token, $type);
    if ($identity && $this->login($identity)) {
        return $identity;
    }
    return null;
}

            
loginByCookie() 受保护方法

通过 cookie 登录用户。

此方法尝试使用 身份 cookie 提供的 ID 和 authKey 信息登录用户。

protected void loginByCookie ( )

                protected function loginByCookie()
{
    $data = $this->getIdentityAndDurationFromCookie();
    if (isset($data['identity'], $data['duration'])) {
        $identity = $data['identity'];
        $duration = $data['duration'];
        if ($this->beforeLogin($identity, true, $duration)) {
            $this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0);
            $id = $identity->getId();
            $ip = Yii::$app->getRequest()->getUserIP();
            Yii::info("User '$id' logged in from $ip via cookie.", __METHOD__);
            $this->afterLogin($identity, true, $duration);
        }
    }
}

            
loginRequired() 公共方法

将用户浏览器重定向到登录页面。

在重定向之前,当前 URL(如果它不是 AJAX URL)将被保留为 $returnUrl,以便用户浏览器可以在成功登录后重定向回当前页面。

确保您设置了 $loginUrl,以便在调用此方法后,用户浏览器可以重定向到指定的登录 URL。

请注意,当 $loginUrl 设置后,调用此方法不会终止应用程序执行。

public yii\web\Response loginRequired ( $checkAjax true, $checkAcceptHeader true )
$checkAjax 布尔值

是否检查请求是否为 AJAX 请求。当此值为 true 且请求为 AJAX 请求时,当前 URL(用于 AJAX 请求)将不会被设置为返回 URL。

$checkAcceptHeader 布尔值

是否检查请求是否接受 HTML 响应。默认为 true。当此值为 true 且请求不接受 HTML 响应时,当前 URL 将不会设置为返回 URL。此外,将抛出 ForbiddenHttpException 而不是重定向用户。此参数从版本 2.0.8 开始可用。

返回值 yii\web\Response

如果设置了 $loginUrl,则为重定向响应

抛出 yii\web\ForbiddenHttpException

如果未设置 $loginUrl 或重定向不可用,则为“访问被拒绝” HTTP 异常。

                public function loginRequired($checkAjax = true, $checkAcceptHeader = true)
{
    $request = Yii::$app->getRequest();
    $canRedirect = !$checkAcceptHeader || $this->checkRedirectAcceptable();
    if (
        $this->enableSession
        && $request->getIsGet()
        && (!$checkAjax || !$request->getIsAjax())
        && $canRedirect
    ) {
        $this->setReturnUrl($request->getAbsoluteUrl());
    }
    if ($this->loginUrl !== null && $canRedirect) {
        $loginUrl = (array) $this->loginUrl;
        if ($loginUrl[0] !== Yii::$app->requestedRoute) {
            return Yii::$app->getResponse()->redirect($this->loginUrl);
        }
    }
    throw new ForbiddenHttpException(Yii::t('yii', 'Login Required'));
}

            
logout() 公共方法

注销当前用户。

这将删除与身份验证相关的会话数据。如果 $destroySession 为 true,则将删除所有会话数据。

public boolean logout ( $destroySession true )
$destroySession 布尔值

是否销毁整个会话。默认为 true。如果 $enableSession 为 false,则忽略此参数。

返回值 布尔值

用户是否已注销

                public function logout($destroySession = true)
{
    $identity = $this->getIdentity();
    if ($identity !== null && $this->beforeLogout($identity)) {
        $this->switchIdentity(null);
        $id = $identity->getId();
        $ip = Yii::$app->getRequest()->getUserIP();
        Yii::info("User '$id' logged out from $ip.", __METHOD__);
        if ($destroySession && $this->enableSession) {
            Yii::$app->getSession()->destroy();
        }
        $this->afterLogout($identity);
    }
    return $this->getIsGuest();
}

            
off() 公共方法

定义于: yii\base\Component::off()

从该组件分离现有事件处理程序。

此方法与 on() 相反。

注意:如果事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与此通配符匹配的普通名称注册的处理程序将保留。

另见 on()

public boolean off ( $name, $handler null )
$name 字符串

事件名称

$handler callable|null

要删除的事件处理程序。如果为 null,则将删除附加到命名事件的所有处理程序。

返回值 布尔值

如果找到并分离了处理程序,则

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() 公共方法

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是有效的 PHP 回调。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,其中包含与事件相关的参数。

从 2.0.14 版本开始,你可以使用通配符模式指定事件名称。

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另请参阅 off()

public void on ( $name, $handler, $data null, $append true )
$name 字符串

事件名称

$handler 可调用

事件处理程序

$data mixed

触发事件时传递给事件处理程序的数据。当调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append 布尔值

是否将新的事件处理程序追加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
regenerateCsrfToken() 受保护方法 (自版本 2.0.14.2 起可用)

重新生成 CSRF 令牌

protected void regenerateCsrfToken ( )

                protected function regenerateCsrfToken()
{
    $request = Yii::$app->getRequest();
    if ($request->enableCsrfCookie || $this->enableSession) {
        $request->getCsrfToken(true);
    }
}

            
removeIdentityCookie() 受保护方法 (自版本 2.0.9 起可用)

删除身份 cookie。

$enableAutoLogin 为 true 时,将使用此方法。

protected void removeIdentityCookie ( )

                protected function removeIdentityCookie()
{
    Yii::$app->getResponse()->getCookies()->remove(Yii::createObject(array_merge($this->identityCookie, [
        'class' => 'yii\web\Cookie',
    ])));
}

            
renewAuthStatus() 受保护方法

使用来自会话和 cookie 的信息更新身份验证状态。

此方法将尝试使用 $idParam 会话变量来确定用户身份。

如果设置了 $authTimeout,此方法将刷新计时器。

如果无法通过会话确定用户身份,则此方法将尝试 通过 Cookie 登录(如果 $enableAutoLogin 为 true)。

protected void renewAuthStatus ( )

                protected function renewAuthStatus()
{
    $session = Yii::$app->getSession();
    $id = $session->getHasSessionId() || $session->getIsActive() ? $session->get($this->idParam) : null;
    if ($id === null) {
        $identity = null;
    } else {
        /* @var $class IdentityInterface */
        $class = $this->identityClass;
        $identity = $class::findIdentity($id);
        if ($identity === null) {
            $this->switchIdentity(null);
        }
    }
    if ($identity !== null) {
        $authKey = $session->get($this->authKeyParam);
        if ($authKey !== null && !$identity->validateAuthKey($authKey)) {
            $identity = null;
            $ip = Yii::$app->getRequest()->getUserIP();
            Yii::warning("Invalid session auth key attempted for user '$id' from $ip: $authKey", __METHOD__);
        }
    }
    $this->setIdentity($identity);
    if ($identity !== null && ($this->authTimeout !== null || $this->absoluteAuthTimeout !== null)) {
        $expire = $this->authTimeout !== null ? $session->get($this->authTimeoutParam) : null;
        $expireAbsolute = $this->absoluteAuthTimeout !== null ? $session->get($this->absoluteAuthTimeoutParam) : null;
        if ($expire !== null && $expire < time() || $expireAbsolute !== null && $expireAbsolute < time()) {
            $this->logout(false);
        } elseif ($this->authTimeout !== null) {
            $session->set($this->authTimeoutParam, time() + $this->authTimeout);
        }
    }
    if ($this->enableAutoLogin) {
        if ($this->getIsGuest()) {
            $this->loginByCookie();
        } elseif ($this->autoRenewCookie) {
            $this->renewIdentityCookie();
        }
    }
}

            
renewIdentityCookie() 受保护方法

更新身份 cookie。

此方法将设置身份 Cookie 的过期时间为当前时间加上最初指定的 Cookie 时长。

protected void renewIdentityCookie ( )

                protected function renewIdentityCookie()
{
    $name = $this->identityCookie['name'];
    $value = Yii::$app->getRequest()->getCookies()->getValue($name);
    if ($value !== null) {
        $data = json_decode($value, true);
        if (is_array($data) && isset($data[2])) {
            $cookie = Yii::createObject(array_merge($this->identityCookie, [
                'class' => 'yii\web\Cookie',
                'value' => $value,
                'expire' => time() + (int) $data[2],
            ]));
            Yii::$app->getResponse()->getCookies()->add($cookie);
        }
    }
}

            
sendIdentityCookie() 受保护方法

发送身份 cookie。

$enableAutoLogin 为 true 时,将使用此方法。它将在 Cookie 中保存 $id身份验证密钥 以及基于 Cookie 的登录信息时长。

另请参阅 loginByCookie().

protected void sendIdentityCookie ( $identity, $duration )
$identity yii\web\IdentityInterface
$duration integer

用户可以保持登录状态的秒数。

                protected function sendIdentityCookie($identity, $duration)
{
    $cookie = Yii::createObject(array_merge($this->identityCookie, [
        'class' => 'yii\web\Cookie',
        'value' => json_encode([
            $identity->getId(),
            $identity->getAuthKey(),
            $duration,
        ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE),
        'expire' => time() + $duration,
    ]));
    Yii::$app->getResponse()->getCookies()->add($cookie);
}

            
setIdentity() 公共方法

设置用户身份对象。

请注意,此方法不处理会话或 Cookie。通常,你应该使用 switchIdentity() 来更改当前用户的身份。

public void setIdentity ( $identity )
$identity yii\web\IdentityInterface|

与当前登录用户关联的身份对象。如果为 null,则表示当前用户将是没有任何关联身份的访客。

抛出 yii\base\InvalidValueException

如果 $identity 对象未实现 yii\web\IdentityInterface

                public function setIdentity($identity)
{
    if ($identity instanceof IdentityInterface) {
        $this->_identity = $identity;
    } elseif ($identity === null) {
        $this->_identity = null;
    } else {
        throw new InvalidValueException('The identity object must implement IdentityInterface.');
    }
    $this->_access = [];
}

            
setReturnUrl() 公共方法

在会话中记住 URL,以便以后可以通过 getReturnUrl() 检索回来。

public void setReturnUrl ( $url )
$url string|array

用户登录后应重定向到的 URL。如果提供数组,则会调用 yii\web\UrlManager::createUrl() 来创建相应的 URL。数组的第一个元素应该是路由,其余的键值对是用于构造 URL 的 GET 参数。例如,

['admin/index', 'ref' => 1]

                public function setReturnUrl($url)
{
    Yii::$app->getSession()->set($this->returnUrlParam, $url);
}

            
switchIdentity() 公共方法

切换到当前用户的新的身份。

$enableSession 为 true 时,此方法可能会根据 $duration 的值使用会话和/或 Cookie 来存储用户身份信息。有关更多详细信息,请参阅 login()

此方法主要由 login()logout()loginByCookie() 调用,当当前用户需要与相应的身份信息关联时。

public void switchIdentity ( $identity, $duration 0 )
$identity yii\web\IdentityInterface|

要与当前用户关联的身份信息。如果为 null,则表示将当前用户切换为访客。

$duration integer

用户可以保持登录状态的秒数。此参数仅在 $identity 不为 null 时使用。

                public function switchIdentity($identity, $duration = 0)
{
    $this->setIdentity($identity);
    if (!$this->enableSession) {
        return;
    }
    /* Ensure any existing identity cookies are removed. */
    if ($this->enableAutoLogin && ($this->autoRenewCookie || $identity === null)) {
        $this->removeIdentityCookie();
    }
    $session = Yii::$app->getSession();
    $session->regenerateID(true);
    $session->remove($this->idParam);
    $session->remove($this->authTimeoutParam);
    $session->remove($this->authKeyParam);
    if ($identity) {
        $session->set($this->idParam, $identity->getId());
        $session->set($this->authKeyParam, $identity->getAuthKey());
        if ($this->authTimeout !== null) {
            $session->set($this->authTimeoutParam, time() + $this->authTimeout);
        }
        if ($this->absoluteAuthTimeout !== null) {
            $session->set($this->absoluteAuthTimeoutParam, time() + $this->absoluteAuthTimeout);
        }
        if ($this->enableAutoLogin && $duration > 0) {
            $this->sendIdentityCookie($identity, $duration);
        }
    }
}

            
trigger() 公共方法

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name 字符串

事件名称

$event yii\base\Event|null

事件实例。如果未设置,则将创建一个默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}