我正在使用Yii开发一个网站。
当我使用gii代码生成器创建模块时,它会自动将身份验证添加到该特定模型和控制器的管理页面。
但我想在索引页面本身添加用户身份验证。因此,当用户打开网站时,它应该要求登录。
我在“view \ site \”目录中有 index.php , login.php 也在同一目录中。
我在“\ controller”目录中有 sitecontroller.php (通常)
这是我在Yii框架中的第一个项目。当网站打开时,有人建议我如何应用用户身份验证。
答案 0 :(得分:9)
只需在SiteController的index()操作顶部添加以下内容:
if(Yii::app()->user->getId()===null)
$this->redirect(array('site/login'));
它将检查用户是否已登录。如果不是这样,页面将重定向到登录。
为了避免未登录用户访问任何操作,您需要修改控制器的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('*'),
),
);
}
在每个控制器中,我们都有这个功能,在其中我们有四个数组。每个数组都声明一个访问规则。在'actions'参数中,我们指定哪些操作将影响该访问规则,在'users'中我们指定允许哪些用户访问操作。 '*'表示所有用户,经过身份验证或未经身份验证。 '@'表示只有经过身份验证的用户,'admin'当然只表示管理员成员。
如果任何'actions'参数没有分配实际操作,那么只需删除而不是行:
array('allow',
'users'=>array('admin'),
),
答案 1 :(得分:1)
好的,我终于完成了。
以下是代码,我已添加到 sitecontroller.php
public function filters()
{
return array(
'accessControl',
);
}
public function accessRules()
{
return array(
array('allow', // allow all users to perform only 'login' action
'actions'=>array('login'),
'users'=>array('*'),
),
array('allow', // allow admin user to perform 'admin' AND 'delete' AND 'index' actions
'actions'=>array('admin','delete','index'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
所以,它现在正在运作。
感谢所有人的宝贵回复
答案 2 :(得分:1)
这与上面相同,但是作为一个组件,它只需要完成一次,所有需要安全性的控制器都可以扩展这个组件。
在组件目录(SecurityController.php
)中添加新组件:
<?php
class SecurityController extends CController {
public $breadcrumbs=array();
public function filters()
{
return array(
'accessControl',
);
}
public function accessRules()
{
return array(
array('allow',
//'actions'=>array('admin','delete','index'),
'users'=>array('admin', '@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
}
现在确保所有需要身份验证的控制器都继承自SecurityController
:
<?php
class JSController extends SecurityController {
答案 3 :(得分:1)
尝试在Yii中强制登录所有页面:
http://www.larryullman.com/2010/07/20/forcing-login-for-all-pages-in-yii/
要在索引页面强行登录,您可以自定义
public function handleBeginRequest($event)
{
if (Yii::app()->user->isGuest && !in_array($_GET['r'],array('site/login'))) {
Yii::app()->user->loginRequired();
}
}
答案 4 :(得分:0)
答案 5 :(得分:0)
关于SecurityController组件建议:
类SecurityController扩展CController
也许是因为更新的版本:我不得不从Controller扩展SecurityController以使其工作。但它起到了魅力的作用