Yii2全局过滤器/行为,强制用户首先进行身份验证

时间:2014-09-23 14:47:21

标签: php yii yii2 rbac

在我的Yii2应用程序中,我试图强制所有用户进行身份验证。如果他们尚未经过身份验证,则应将其重定向到登录页面。

在Yii1中,我通过创建一个类来检查用户是否已登录并将该类附加到主配置文件中的onBeginRequest行为来完成此操作。

// Yii 1
'behaviors' => array(
    'onBeginRequest' => array(
        'class' => 'application.components.RequireLogin',
    )
),

如何在Yii2中获得相同的行为?我知道我可以使用行为来执行此操作,但我不想将此行为添加到我的主配置文件中,因此首先检查所有请求的身份验证。

工作行为方法如下所示:

// Yii2
public function behaviors() {
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['login', 'error'],
                    'allow' => true,
                ],
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
    ];
}

2 个答案:

答案 0 :(得分:30)

好的,所以我不得不在下面添加以下代码 'components' => [...]

 'as beforeRequest' => [
    'class' => 'yii\filters\AccessControl',
    'rules' => [
        [
            'actions' => ['login', 'error'],
            'allow' => true,
        ],
        [

            'allow' => true,
            'roles' => ['@'],
        ],
    ],
],

详细了解格式:http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#configuration-format

答案 1 :(得分:-1)

我实际上并不熟悉Yii2(尤其是Yii1)。

可以在Yii1中使用的一个解决方案,我想在Yii2中也可以在主控制器类中使用过滤器方法。通常,单个控制器用作主控制器。如果你没有,创建它,每个人都应该扩展它。你可以实现这个不是作为过滤器而是在这个'主控制器'的其他方法中(init()?) 如果所有活动都通过控制器类,那么您已经设置好了。