Yii检查用户是否在每个页面之前都被记录

时间:2013-06-19 09:11:29

标签: php yii

我必须在渲染每个页面示例之前检查用户是否已记录:

http://mypage.com/site/about

开始检查用户是否登录,如果没有 - 重定向tom登录页面 我不想在每一个组件中添加它,怎么做到这一点?

9 个答案:

答案 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
}