在加载任何操作方法之前,在yii中进行Url重定向


Url redirection in yii before loading any action method?

我一直遭受重定向问题。我开发了一个用户模块。在这个用户模块下,我创建了一个带有登录动作方法的控制器。我想确保只有经过身份验证的用户才能访问我的应用程序中的模块或静态页面。

if (Yii::app()->user->isGuest)
        {
            $ab = Yii::app()->user->loginUrl;
            echo $ab;
            $controller->redirect($controller->createUrl(reset(Yii::app()->user->loginUrl)));
            return true;
        }
        else
        {
            return true;
        }

您需要在每个想要保护的控制器/操作上启用'Access Control Filter'。

要启用访问控制过滤器,请在控制器中添加此方法:

class MyController extends CController
{
    public function filters()
    {
        return array(
            'accessControl',
        );
    }
}

然后,配置访问控制规则以确保只有非guest用户可以访问控制器操作:

class MyController extends CController
{
    public function accessRules()
    {
        return array(
            array('deny',
                'users'=>array('?'), //Deny all guest users
            ),
        );
    }
}

现在,当来宾用户试图访问MyController时,他们将自动重定向到您的登录页面。

要完成这一切,你需要告诉Yii在哪里找到你的登录页面。

您可以在组件部分的Yii配置(main.php)文件中设置自定义登录url:

array(
    ...
    'components'=>array(
        'user'=>array(
            'loginUrl'=>array('someModule/someController/someAction'),
        ),
    ),
)

默认情况下,Yii将url设置为site/login

有关更多信息,请参阅Yii认证指南:http://www.yiiframework.com/doc/guide/1.1/en/topics.auth