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异常。