我必须在渲染每个页面示例之前检查用户是否已记录:
开始检查用户是否登录,如果没有 - 重定向tom登录页面 我不想在每一个组件中添加它,怎么做到这一点?
答案 0 :(得分:5)
如果确实如此,则还可以使用此选项进行检查,然后用户未登录,否则登录
if(Yii::app()->user->isGuest){
//not logged user
}else{
//loggedin user
}
答案 1 :(得分:3)
您可以在控制器的init()
功能中编写支票。如果用户未登录,将重定向用户
public function init()
{
if(!isset(Yii::app()->session['user']))
{
$this->redirect(array('login/'));
}
}
答案 2 :(得分:3)
使用访问规则来实现这是一种更好的方法:
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'contact' actions
'actions'=>array('index','contact'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'delete' and 'update' actions
'actions'=>array('update','delete'),
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
如果你真的想要一个地方检查,那么转到component/controller
并在控制器中进行。因为所有控制器都继承自该控制器。
答案 3 :(得分:3)
这对我有用
public function beforeAction(CAction $action)
{
if(!isset(Yii::app()->user->user_id) && !($action->controller->id == 'site' && $action->id == 'login'))
{
$this->redirect(array('site/login'));
}
return true;
}
您只需在component / Controller.php
中添加上述功能即可答案 4 :(得分:2)
对于全局解决方案,将accessControl添加到基本控制器(默认为protected/components/CController.php
)。
public function filters(){
return array('accessControl');
}
public function accessRules()
{
return array(
array('allow',
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
然后在具有登录操作的控制器中编辑accessRules
以允许所有用户访问登录页面
public function accessRules()
{
return array_merge(array(
'allow',
'actions'=>array('login'),
'users'=>array('*'),
),parent::accessRules()
);
}
答案 5 :(得分:0)
使用beforeAction
扩展组件/控制器public function beforeAction(CAction $action)
{
if(!isset(Yii::app()->session['user']) && !($action->controller->id == 'site' && $action->id == 'login'))
{
$this->redirect(array('site/login'));
}
return true;
}
答案 6 :(得分:0)
您可以在配置中添加全局行为:
'as access' => [
'class' => \yii\filters\AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error', 'resend', 'forgot'],
'allow' => true,
],
// allow authenticated users
[
'allow' => true,
'roles' => ['@'],
],
]
],
http://stuff.cebe.cc/yii2docs/guide-concept-configurations.html#configuration-format
答案 7 :(得分:0)
抱歉僵尸发布,但我使用的是isGuest。
if (Yii::app()->user->isGuest)
{
$this->redirect('login/page');
}
答案 8 :(得分:-1)
编写代码以检查用户是否已登录其他文件。
然后在每个文件中包含该php页面。
您只需编写以下代码即可。
include('checklogin.php');
在checklogin.php页面中,您可以编写以下内容以检查cookie是否已设置。
isset(cookie('<name_of_cookie>'))
{
//User in already logged in
}
else
{
//Redirect to login page
}