在呈现每个页面示例之前,我必须检查用户是否已登录:
在开始检查用户是否登录,如果没有 - 重定向汤姆登录页面我不想将它添加到每个组件中,如何做到这一点?
在呈现每个页面示例之前,我必须检查用户是否已登录:
在开始检查用户是否登录,如果没有 - 重定向汤姆登录页面我不想将它添加到每个组件中,如何做到这一点?
您还可以检查是否使用此选项,如果为真,则用户未登录,否则已登录
if(Yii::app()->user->isGuest){
//not logged user
}else{
//loggedin user
}
使用访问规则来实现这将是一个更好的方法:
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
控制器中做。因为所有控制器都继承自该控制器。
init()
您可以在控制器的功能中编写检查。如果用户未登录,它将重定向用户
public function init()
{
if(!isset(Yii::app()->session['user']))
{
$this->redirect(array('login/'));
}
}
这对我有用
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 中添加上述功能
对于全局解决方案,将 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()
);
}
使用 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;
}
您可以将全局行为添加到您的配置中:
'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
对不起,僵尸发帖,但我使用 isGuest。
if (Yii::app()->user->isGuest)
{
$this->redirect('login/page');
}
编写代码以检查用户是否登录到不同的文件中。
然后在每个文件中包含该 php 页面。
您只需要编写以下代码。
include('checklogin.php');
在 checklogin.php 页面中,您可以编写以下内容来检查是否设置了 cookie。
isset(cookie('<name_of_cookie>'))
{
//User in already logged in
}
else
{
//Redirect to login page
}