Class yii\filters\auth\HttpBasicAuth

继承yii\filters\auth\HttpBasicAuth » 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/HttpBasicAuth.php

HttpBasicAuth 是支持 HTTP 基本身份验证方法的动作过滤器.

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

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

HttpBasicAuth 的默认实现使用应用程序用户(user)组件的 loginByAccessToken() 方法, 并且仅传递用户名. 此实现用户验证 API 客户端.

如果要使用用户名和密码对用户进行身份验证, 则应提供 $auth 函数, 如下所示:

public function behaviors()
{
    return [
        'basicAuth' => [
            'class' => \yii\filters\auth\HttpBasicAuth::className(),
            'auth' => function ($username, $password) {
                $user = User::find()->where(['username' => $username])->one();
                if ($user->verifyPassword($password)) {
                    return $user;
                }
                return null;
            },
        ],
    ];
}

Tip: 如果身份验证无法按预期工作, 请确保你的 Web 服务器将用户名和密码传递给$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']变量. 如果你将 Apache 和 PHP-CGI 一起使用, 则可能需要将此行添加到.htaccess文件中: RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

公共属性

隐藏继承的属性

属性类型描述定义在
$auth callable 一个 PHP 回调, 它将使用 HTTP 基本身份验证信息对用户进行身份验证. yii\filters\auth\HttpBasicAuth
$except array 此过滤器不适用的动作ID列表, 列表中的动作将不被过滤. yii\base\ActionFilter
$only array 此过滤器应适用的动作ID列表, 仅列表中的动作被过滤. yii\base\ActionFilter
$optional array 此过滤器将应用于的动作 ID 列表, 但身份验证失败不会导致错误. yii\filters\auth\AuthMethod
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior
$realm string HTTP 身份验证域. yii\filters\auth\HttpBasicAuth
$request yii\web\Request 当前请求. yii\filters\auth\AuthMethod
$response yii\web\Response 要发送的回复. yii\filters\auth\AuthMethod
$user yii\web\User 代表用户身份验证状态的用户对象. yii\filters\auth\AuthMethod

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. 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\HttpBasicAuth
beforeAction() 在执行动作之前(在所有可能的过滤器之后)立即调用该方法. yii\filters\auth\AuthMethod
beforeFilter() yii\base\ActionFilter
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
challenge() 身份验证失败时产生的挑战. yii\filters\auth\HttpBasicAuth
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\ActionFilter
events() 声明 所有者 事件的事件处理程序. 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

属性详情

$auth public 属性

一个 PHP 回调, 它将使用 HTTP 基本身份验证信息对用户进行身份验证.

可调用对象接受用户名和密码作为其参数. 它应返回与用户名和密码匹配的身份对象. 如果没有这样的标识, 则应返回null.

仅当当前用户未通过身份验证时, 才会调用可调用对象.

以下代码时次可调用对象的典型实现:

function ($username, $password) {
    return \app\models\User::findOne([
        'username' => $username,
        'password' => $password,
    ]);
}

如果未设置此属性, 则用户信息将被视为访问令牌, 而密码信息将被忽略. yii\web\User::loginByAccessToken() 方法将被调用以认证和登录用户.

public callable $auth null
$realm public 属性

HTTP 身份验证域.

public string $realm 'api'

方法详情

authenticate() public 方法

验证当前用户.

public yii\web\IdentityInterface authenticate ( $user, $request, $response )
$user yii\web\User
$request yii\web\Request
$response yii\web\Response
return yii\web\IdentityInterface

经过身份验证的用户身份. 如果未提供身份验证信息, 则将返回null.

throws yii\web\UnauthorizedHttpException

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

challenge() public 方法

身份验证失败时产生的挑战.

例如, 可能会生成一些适当的 HTTP 表头.

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