Yii2 将未经授权的用户重定向到其他控制器操作

Yii2 将未经授权的用户重定向到其他控制器操作,yii2,Yii2,我有此控制器代码用于登录: public function actionLogin() { if (!\Yii::$app->user->isGuest) { return $this->redirect(Yii::$app->request->baseUrl.'/telephone/index'); } $model = new Login

我有此控制器代码用于登录:

 public function actionLogin()
        {
            if (!\Yii::$app->user->isGuest) {
                return $this->redirect(Yii::$app->request->baseUrl.'/telephone/index'); 
            }

            $model = new LoginForm();
            if ($model->load(Yii::$app->request->post()) && $model->login()) {
                return $this->redirect(Yii::$app->request->baseUrl.'/telephone/index'); 
            }
            return $this->render('login', [
                'model' => $model,
            ]);
        }
为了防止对我使用的未经授权的用户执行
添加
删除
操作:

public function behaviors()
{
    return [
            'access' => [
            'class' => AccessControl::className(),
            'only' => ['add','delete'],
            'rules' => [
                // allow authenticated users
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],
                // everything else is denied by default
            ],
        ],
    ];
}

但是,如果未经授权的用户点击添加或删除,它将被重定向到
站点/login
。如何更改该控制器和操作?

根据范围的不同,有不同的方法来更改该路由。它们都涉及改变类的属性

全球

编辑配置文件

'components' => [
    'user' => [
        'loginUrl' => ["controller/action"],  
    ],
],
控制器/动作

编辑控制器的操作前方法

public function beforeAction($action)
{
    // action-specific
    if(in_array($action->id,['not', 'allowed', 'actions']))
        Yii::$app->user->loginUrl = ["controller/action"];

    // controller-wide
    Yii::$app->user->loginUrl = ["controller/action"];

    if (!parent::beforeAction($action)) {
        return false;
    }

    return true;
}

根据范围的不同,有不同的方法来更改该路线。它们都涉及改变类的属性

全球

编辑配置文件

'components' => [
    'user' => [
        'loginUrl' => ["controller/action"],  
    ],
],
控制器/动作

编辑控制器的操作前方法

public function beforeAction($action)
{
    // action-specific
    if(in_array($action->id,['not', 'allowed', 'actions']))
        Yii::$app->user->loginUrl = ["controller/action"];

    // controller-wide
    Yii::$app->user->loginUrl = ["controller/action"];

    if (!parent::beforeAction($action)) {
        return false;
    }

    return true;
}

即使我在matchcallback中更改了url,仍然重定向到site/loigin。即使我在matchcallback中更改了url,仍然重定向到site/loigin。无论哪种方式都不起作用。仍然重定向到site/loginalso考虑到另一个答案,您是否也为sitecontroller配置了accessrules?或者可能是无效路由。尝试在配置中将
loginUrl
属性设置为
null
。在访问denycallback时,这将给您一个
403异常
。无论哪种方式,它都不起作用。仍然重定向到site/loginalso考虑到另一个答案,您是否也为sitecontroller配置了accessrules?或者可能是无效路由。尝试在配置中将
loginUrl
属性设置为
null
。在访问denycallback时,应该会出现
403异常。