如何在Yii中的索引页面上验证用户

Dar*_*jar 3 php authentication login yii

我正在使用Yii开发一个网站.

当我使用gii代码生成器创建模块时,它会自动将身份验证添加到该特定模型和控制器的管理页面.

但我想在索引页面本身添加用户身份验证.因此,当用户打开网站时,它应该要求登录.

我在"view\site \"目录中有index.php,login.php也在同一目录下.

我在"\ controller"目录中有sitecontroller.php(通常)

这是我在Yii框架中的第一个项目.当网站打开时,有人建议我如何应用用户身份验证.

Alf*_*cia 9

只需在SiteController的index()操作的顶部添加以下内容:

if(Yii::app()->user->getId()===null)
            $this->redirect(array('site/login'));
Run Code Online (Sandbox Code Playgroud)

它将检查用户是否已登录.如果不是这样,页面将重定向到登录.

为了避免未记录的用户访问任何操作,您需要修改控制器的accessRules()函数:

public function accessRules()
{
    return array(
        array('allow',
            'actions'=>array(),
            'users'=>array('*'),
        ),
        array('allow', 
            'actions'=>array(),
            'users'=>array('@'),
        ),
        array('allow',
                            'actions'=>array(), 
            'users'=>array('admin'),
        ),
        array('deny',
                            'actions'=>array(), 
            'users'=>array('*'),
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)

在每个控制器中,我们都有这个功能,在其中我们有四个数组.每个数组都声明一个访问规则.在'actions'参数中,我们指定哪些操作将影响该访问规则,在'users'中我们指定允许哪些用户访问操作.'*'表示所有用户,经过身份验证或未经身份验证.'@'表示只有经过身份验证的用户,'admin'当然只表示管理员成员.

如果任何'actions'参数没有分配实际操作,那么只需删除而不是行:

        array('allow',
                   'users'=>array('admin'),
        ), 
Run Code Online (Sandbox Code Playgroud)