首页 > 解决方案 > 为未经授权的用户禁用内置身份验证器错误 Yii2

问题描述

我有一个有很多动作的控制器。现在我想使用基于令牌的身份验证,所以我改变了这样的行为:

public function behaviors()
{
    return [
        'authenticator' => [
            'class' => CompositeAuth::className(),
            'only' => [
                'logout',
                'revoke'
            ],
            'authMethods' => [
                HttpBasicAuth::className(),
                HttpBearerAuth::className(),
                QueryParamAuth::className(),
            ],
        ]
    ];
}

此代码运行良好,但存在一个问题。我想自己处理未经授权的用户(不是 Yii),但是当有未经授权的用户向我的操作发送请求时,我的操作不起作用,它将返回 Yii 的默认错误。

如何告诉 Yii 只对用户进行身份验证(因为我想使用Yii::$app->user->isGuest)而不发送默认错误?

更新:我只想禁用身份验证器错误,我需要其他错误。

Yii2

PHP 7.2

标签: phpyii2yii2-basic-app

解决方案


您可以使用$optional属性来配置身份验证应该是可选的操作(不应该抛出错误)。如果它对所有动作都是可选的,您可以使用*而不是动作名称:

public function behaviors()
{
    return [
        'authenticator' => [
            'class' => CompositeAuth::className(),
            'optional' => ['*'],
            // ...
        ]
    ];
}

推荐阅读