重定向到登录页面到未授权用户yii

时间:2013-07-07 22:01:55

标签: yii

页面控制器的访问规则:

public function accessRules()
{                   
    $isadmin = User::loadUser(Yii::app()->user->id)->adminUser;

    return array(
            array('allow', 
                    'actions'=>array('index','view','create','update'),
                    'expression'=>"{$isadmin}==1",
                    ),
          array('deny',  // deny all users
                'users'=>array('*'),
            ),          

    );
}

主配置:

 'user' => array(         // Webuser for the admin area (admin)
        'class'             => 'WebUser',
        'allowAutoLogin' => true,
        'loginUrl'          => array('/user/login'),
        'stateKeyPrefix'    => 'admin_',
    ),

问题: 当我访问pages / create时,它没有重定向到user / login但抛出异常:

Error 404

The requested page does not exist.

如何为未经授权的用户重定向到登录页面?

3 个答案:

答案 0 :(得分:2)

您可以使用'deniedCallback'来执行此操作。

方法1

      'deniedCallback' => function() {Yii::app()->controller->redirect(array ('actionName'));},

      //It will come As

       array('allow',                
            'actions' => array('actionName1,actionName2,actionName3'),
            'deniedCallback' => function() {Yii::app()->controller->redirect(array ('actionName'));},
            'users' => array('@'),
        ),

方法2: 您也可以通过调用函数来执行相同的操作,请参阅下面的代码。

        array('allow',
            'deniedCallback' => array($this, 'goToLogin'),
            'actions' => array('actionName1,actionName2,actionName3'),
            'users' => array('@'),
        ),

goToLogin 方法的代码

        public function goToLogin()
        {
             $this->redirect('/controller/actionName');
             //For your program 
             //$this->redirect('/site/login');
        }

答案 1 :(得分:1)

的Yii ::应用程序() - >用户> loginRequired();

答案 2 :(得分:0)

在每个控制器中添加此功能。

public function beforeAction($action) {

if (Yii::app()->user->isGuest && Yii::app()->controller->action->id != "login") {
    Yii::app()->user->loginRequired();
}
//something code right here if user valid
return true;  
}

站点控制器只需 Yii :: app() - > controller-> action-> id!=“login”此条件。删除它为另一个控制器