0 关注者

类 yii\filters\auth\HttpBearerAuth

继承yii\filters\auth\HttpBearerAuth » yii\filters\auth\HttpHeaderAuth » yii\filters\auth\AuthMethod » yii\base\ActionFilter » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable, yii\filters\auth\AuthInterface
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/filters/auth/HttpBearerAuth.php

HttpBearerAuth 是一个支持基于 HTTP Bearer 令牌的认证方法的动作过滤器。

您可以通过将 HttpBearerAuth 作为行为附加到控制器或模块来使用它,如下所示

public function behaviors()
{
    return [
        'bearerAuth' => [
            'class' => \yii\filters\auth\HttpBearerAuth::class,
        ],
    ];
}

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$except array 此过滤器不应应用于的操作 ID 列表。 yii\base\ActionFilter
$header string HTTP 标头名称 yii\filters\auth\HttpBearerAuth
$only array 此过滤器应应用于的操作 ID 列表。 yii\base\ActionFilter
$optional array 此过滤器将应用于的操作 ID 列表,但认证失败不会导致错误。 yii\filters\auth\AuthMethod
$owner yii\base\Component|null 此行为的拥有者 yii\base\Behavior
$pattern string 用于提取 HTTP 认证值的模式 yii\filters\auth\HttpBearerAuth
$realm string HTTP 认证领域 yii\filters\auth\HttpBearerAuth
$request yii\web\Request|null 当前请求。 yii\filters\auth\AuthMethod
$response yii\web\Response|null 要发送的响应。 yii\filters\auth\AuthMethod
$user yii\web\User|null 表示用户认证状态的用户对象。 yii\filters\auth\AuthMethod

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\BaseObject
__construct() 构造函数。 yii\base\BaseObject
__get() 返回对象属性的值。 yii\base\BaseObject
__isset() 检查属性是否设置,即定义且不为空。 yii\base\BaseObject
__set() 设置对象属性的值。 yii\base\BaseObject
__unset() 将对象属性设置为 null。 yii\base\BaseObject
afterAction() 此方法在操作执行后立即调用。 yii\base\ActionFilter
afterFilter() yii\base\ActionFilter
attach() 将行为对象附加到组件。 yii\base\ActionFilter
authenticate() 认证当前用户。 yii\filters\auth\HttpHeaderAuth
beforeAction() 此方法在操作要执行之前调用(在所有可能的过滤器之后)。您可以覆盖此方法来对操作进行最后一分钟的准备。 yii\filters\auth\AuthMethod
beforeFilter() yii\base\ActionFilter
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\BaseObject
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\BaseObject
challenge() 在认证失败时生成挑战。 yii\filters\auth\HttpBearerAuth
className() 返回此类的完全限定名称。 yii\base\BaseObject
detach() 从组件中分离行为对象。 yii\base\ActionFilter
events() $owner 的事件声明事件处理程序。 yii\base\Behavior
handleFailure() 处理认证失败。 yii\filters\auth\AuthMethod
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\BaseObject
hasProperty() 返回一个值,指示是否定义了属性。 yii\base\BaseObject
init() 初始化对象。 yii\base\BaseObject

受保护的方法

隐藏继承的方法

方法 描述 定义于
getActionId() 通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回操作 ID。 yii\base\ActionFilter
isActive() 返回一个值,指示过滤器对于给定操作是否处于活动状态。 yii\base\ActionFilter
isOptional() 检查认证对于给定操作是否可选。 yii\filters\auth\AuthMethod

属性详细信息

隐藏继承的属性

$header 公共属性

HTTP 标头名称

public string $header 'Authorization'
$pattern 公共属性

用于提取 HTTP 认证值的模式

public string $pattern '/^Bearer\s+(.*?)$/'
$realm 公共属性

HTTP 认证领域

public string $realm 'api'

方法详细信息

隐藏继承的方法

__call() 公共方法

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

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

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

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

返回值 混合

方法返回值

抛出异常 yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public method

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

构造函数。

默认实现执行以下两项操作

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

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

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

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

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

            
__get() public method

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

返回对象属性的值。

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

另见 __set()

public mixed __get ( $name )
$name string

属性名称

返回值 混合

属性值

抛出异常 yii\base\UnknownPropertyException

如果未定义属性

抛出异常 yii\base\InvalidCallException

如果属性为只写

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (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() public method

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

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

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

请注意,如果未定义属性,则将返回 false。

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

public boolean __isset ( $name )
$name string

属性名称或事件名称

返回值 boolean

命名属性是否已设置(不为 null)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

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

设置对象属性的值。

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

另见 __get()

public void __set ( $name, $value )
$name string

属性名称或事件名称

$value 混合

属性值

抛出异常 yii\base\UnknownPropertyException

如果未定义属性

抛出异常 yii\base\InvalidCallException

如果属性为只读

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

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

将对象属性设置为 null。

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

请注意,如果未定义属性,则此方法将不执行任何操作。如果属性为只读,则会抛出异常。

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

public void __unset ( $name )
$name string

属性名称

抛出异常 yii\base\InvalidCallException

如果属性为只读。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
afterAction() public method

定义于: yii\base\ActionFilter::afterAction()

此方法在操作执行后立即调用。

可以重写此方法,为操作执行一些后处理。

public mixed afterAction ( $action, $result )
$action yii\base\Action

刚刚执行的操作。

$result 混合

操作执行结果

返回值 混合

已处理的操作结果。

                public function afterAction($action, $result)
{
    return $result;
}

            
afterFilter() public method
public void afterFilter ( $event )
$event yii\base\ActionEvent

                public function afterFilter($event)
{
    $event->result = $this->afterAction($event->action, $event->result);
    $this->owner->off(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter']);
}

            
attach() public method

定义于: yii\base\ActionFilter::attach()

将行为对象附加到组件。

默认实现将设置 $owner 属性,并按照 events() 中声明的事件处理程序进行附加。如果重写此方法,请确保调用父类的实现。

public void attach ( $owner )
$owner yii\base\Component

要将此行为附加到的组件。

                public function attach($owner)
{
    $this->owner = $owner;
    $owner->on(Controller::EVENT_BEFORE_ACTION, [$this, 'beforeFilter']);
}

            
authenticate() public method

定义于: yii\filters\auth\HttpHeaderAuth::authenticate()

认证当前用户。

public yii\web\IdentityInterface|null authenticate ( $user, $request, $response )
$user yii\web\User
$request yii\web\Request
$response yii\web\Response
返回值 yii\web\IdentityInterface|null

已验证的用户身份。如果未提供身份验证信息,则返回 null。

抛出异常 yii\web\UnauthorizedHttpException

如果提供了身份验证信息,但无效。

                public function authenticate($user, $request, $response)
{
    $authHeader = $request->getHeaders()->get($this->header);
    if ($authHeader !== null) {
        if ($this->pattern !== null) {
            if (preg_match($this->pattern, $authHeader, $matches)) {
                $authHeader = $matches[1];
            } else {
                return null;
            }
        }
        $identity = $user->loginByAccessToken($authHeader, get_class($this));
        if ($identity === null) {
            $this->challenge($response);
            $this->handleFailure($response);
        }
        return $identity;
    }
    return null;
}

            
beforeAction() public method

定义于: yii\filters\auth\AuthMethod::beforeAction()

此方法在操作要执行之前调用(在所有可能的过滤器之后)。您可以覆盖此方法来对操作进行最后一分钟的准备。

public boolean beforeAction ( $action )
$action yii\base\Action

要执行的操作。

返回值 boolean

操作是否应该继续执行。

                public function beforeAction($action)
{
    $response = $this->response ?: Yii::$app->getResponse();
    try {
        $identity = $this->authenticate(
            $this->user ?: Yii::$app->getUser(),
            $this->request ?: Yii::$app->getRequest(),
            $response
        );
    } catch (UnauthorizedHttpException $e) {
        if ($this->isOptional($action)) {
            return true;
        }
        throw $e;
    }
    if ($identity !== null || $this->isOptional($action)) {
        return true;
    }
    $this->challenge($response);
    $this->handleFailure($response);
    return false;
}

            
beforeFilter() 公共方法
public void beforeFilter ( $event )
$event yii\base\ActionEvent

                public function beforeFilter($event)
{
    if (!$this->isActive($event->action)) {
        return;
    }
    $event->isValid = $this->beforeAction($event->action);
    if ($event->isValid) {
        // call afterFilter only if beforeFilter succeeds
        // beforeFilter and afterFilter should be properly nested
        $this->owner->on(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter'], null, false);
    } else {
        $event->handled = true;
    }
}

            
canGetProperty() 公共方法

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

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

如果属性可读,则

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

另请参阅 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

该属性是否可读

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() 公共方法

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

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

如果属性可写,则

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

另请参阅 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

该属性是否可写

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
challenge() 公共方法

在认证失败时生成挑战。

例如,可以生成一些合适的 HTTP 标头。

public void challenge ( $response )
$response yii\web\Response

                public function challenge($response)
{
    $response->getHeaders()->set('WWW-Authenticate', "Bearer realm=\"{$this->realm}\"");
}

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

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

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

public static string className ( )
返回值 string

此类的完全限定名称。

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

            
detach() 公共方法

定义于: yii\base\ActionFilter::detach()

从组件中分离行为对象。

默认实现将取消设置 $owner 属性并分离在 events() 中声明的事件处理程序。如果您覆盖此方法,请确保调用父实现。

public void detach ( )

                public function detach()
{
    if ($this->owner) {
        $this->owner->off(Controller::EVENT_BEFORE_ACTION, [$this, 'beforeFilter']);
        $this->owner->off(Controller::EVENT_AFTER_ACTION, [$this, 'afterFilter']);
        $this->owner = null;
    }
}

            
events() 公共方法

定义于: yii\base\Behavior::events()

$owner 的事件声明事件处理程序。

子类可以覆盖此方法来声明应附加到 $owner 组件事件的 PHP 回调。

当行为附加到所有者时,回调将附加到 $owner 的事件;当行为从组件分离时,回调将从事件中分离。

回调可以是以下任一

  • 此行为中的方法:'handleClick',等同于 [$this, 'handleClick']
  • 对象方法:[$object, 'handleClick']
  • 静态方法:['Page', 'handleClick']
  • 匿名函数:function ($event) { ... }

以下是一个示例

[
    Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
    Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
]
public array events ( )
返回值 array

事件(数组键)和相应的事件处理程序方法(数组值)。

                public function events()
{
    return [];
}

            
getActionId() 受保护方法 (自版本 2.0.7 起可用)

定义于: yii\base\ActionFilter::getActionId()

通过将 yii\base\Action::$uniqueId 转换为相对于模块的 ID 来返回操作 ID。

protected string getActionId ( $action )
$action yii\base\Action

                protected function getActionId($action)
{
    if ($this->owner instanceof Module) {
        $mid = $this->owner->getUniqueId();
        $id = $action->getUniqueId();
        if ($mid !== '' && strpos($id, $mid) === 0) {
            $id = substr($id, strlen($mid) + 1);
        }
    } else {
        $id = $action->id;
    }
    return $id;
}

            
handleFailure() 公共方法

定义于: yii\filters\auth\AuthMethod::handleFailure()

处理认证失败。

实现通常应该抛出 UnauthorizedHttpException 来指示身份验证失败。

public void handleFailure ( $response )
$response yii\web\Response
抛出异常 yii\web\UnauthorizedHttpException

                public function handleFailure($response)
{
    throw new UnauthorizedHttpException('Your request was made with invalid credentials.');
}

            
hasMethod() 公共方法

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

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

默认实现是对 php 函数 method_exists() 的调用。当您实现 php 魔术方法 __call() 时,可以覆盖此方法。

public boolean hasMethod ( $name )
$name string

方法名称

返回值 boolean

该方法是否已定义

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() 公共方法

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

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

如果属性已定义,则

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

另请参阅

public boolean hasProperty ( $name, $checkVars true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

返回值 boolean

该属性是否已定义

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

            
init() 公共方法

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

初始化对象。

此方法在构造函数结束时调用,在对象使用给定的配置初始化之后调用。

public void init ( )

                public function init()
{
}

            
isActive() protected method

定义于: yii\base\ActionFilter::isActive()

返回一个值,指示过滤器对于给定操作是否处于活动状态。

protected boolean isActive ( $action )
$action yii\base\Action

正在过滤的操作

返回值 boolean

过滤器是否对给定操作处于活动状态。

                protected function isActive($action)
{
    $id = $this->getActionId($action);
    if (empty($this->only)) {
        $onlyMatch = true;
    } else {
        $onlyMatch = false;
        foreach ($this->only as $pattern) {
            if (StringHelper::matchWildcard($pattern, $id)) {
                $onlyMatch = true;
                break;
            }
        }
    }
    $exceptMatch = false;
    foreach ($this->except as $pattern) {
        if (StringHelper::matchWildcard($pattern, $id)) {
            $exceptMatch = true;
            break;
        }
    }
    return !$exceptMatch && $onlyMatch;
}

            
isOptional() protected method (available since version 2.0.7)

定义于: yii\filters\auth\AuthMethod::isOptional()

检查认证对于给定操作是否可选。

另请参阅 $optional.

protected boolean isOptional ( $action )
$action yii\base\Action

要检查的操作。

返回值 boolean

身份验证是否可选。

                protected function isOptional($action)
{
    $id = $this->getActionId($action);
    foreach ($this->optional as $pattern) {
        if (StringHelper::matchWildcard($pattern, $id)) {
            return true;
        }
    }
    return false;
}