8

在呈现每个页面示例之前,我必须检查用户是否已登录:

http://mypage.com/site/about

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

4

9 回答 9

8

您还可以检查是否使用此选项,如果为真,则用户未登录,否则已登录

    if(Yii::app()->user->isGuest){
     //not logged user
    }else{
     //loggedin user
    }
于 2013-06-19T09:18:16.147 回答
4

使用访问规则来实现这将是一个更好的方法:

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控制器中做。因为所有控制器都继承自该控制器。

于 2013-06-19T09:19:33.433 回答
3

init()您可以在控制器的功能中编写检查。如果用户未登录,它将重定向用户

public function init()
{
    if(!isset(Yii::app()->session['user']))
    {
        $this->redirect(array('login/'));
    }
}
于 2013-06-19T09:15:12.143 回答
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 中添加上述功能

于 2014-09-23T06:13:21.307 回答
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()
    );
}
于 2013-06-19T09:51:44.643 回答
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;
}
于 2014-05-02T09:58:24.987 回答
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

于 2014-11-24T10:47:01.170 回答
0

对不起,僵尸发帖,但我使用 isGuest。

if (Yii::app()->user->isGuest)
{
  $this->redirect('login/page');
}
于 2015-07-07T17:12:15.143 回答
-1

编写代码以检查用户是否登录到不同的文件中。

然后在每个文件中包含该 php 页面。

您只需要编写以下代码。

include('checklogin.php');

在 checklogin.php 页面中,您可以编写以下内容来检查是否设置了 cookie。

isset(cookie('<name_of_cookie>'))
{
 //User in already logged in
}
else
{
 //Redirect to login page
} 
于 2013-06-19T09:18:32.140 回答