Yii2-登录后重定向回操作

时间:2018-10-12 20:21:35

标签: php yii2

我认为我已经弄乱了Yii2的默认行为,但无法找出位置。

我有一个菜单/操作,需要登录用户访问。当用户单击菜单时,需要正确登录屏幕。

但是登录后,它应该重定向回到菜单操作,但它会转到仪表板。

我在用户控制器中的代码如下:

var query = (*/Working query*/)

var e = Expression.Parameter(typeof(Email), "e");
var param = Expression.PropertyOrField(e, "Subject");
var OrderParam = Expression.Lambda<Func<Email, string>>( param, e);
query.OrderBy(OrderParam);

和站点控制器中

select Subject from Emails order by Subject

需要登录的控制器/动作是保留/保留。

2 个答案:

答案 0 :(得分:0)

对于您的情况,我建议使用yii2 AccessControl,以便一旦用户想要访问受限操作,它就会重定向到登录页面,用户可以在该页面上登录并重定向回预期的操作。
这是您的预订控制器类

中的示例访问过滤器
 public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['reservation'],
            'rules' => [
                [
                    'allow' => true,
                    'actions' => ['reservation'],
                    'roles' => ['@'],
                ],
            ],
            'denyCallback' => function ($rule, $action) {
                $this->redirect(['user/reservation-login', 'controller' => \Yii::$app->controller->id]);
            },
        ],
    ];
}

一旦用户被重定向到预订登录页面,检查是否来自预订控制器登录,然后重定向回去,请确保您通过(URL参数控制器,以告知登录操作这不是正常登录),如下所示

public function actionReservationLogin($controller = null)
{
    if ($controller == 'reservation'){
         $model = new LoginForm(['scenario' => 'login']);
         if ($model->load(Yii::$app->request->post()) && $model->login()) {
           return $this->goBack();
        }
    }

    if (!Yii::$app->user->isGuest) {
        return $this->goHome();
    }
}

注意:您也可以使用会话向yii告知用户信息,而不是在操作网址中传递信息

答案 1 :(得分:-1)

好吧,我发现修改了哪些代码,然后将其修复。

代码就像

if (Yii::$app->user->identity->user_role != 'user') {

            $path = "../" . Yii::$app->user->identity->user_role;

            return $this->redirect($path);
        } else {
            //$path = "../" . Yii::$app->user->identity->user_role . "/view";
            // return $this->redirect($path);

                        return $this->goBack();

所以在其他部分,我已经注释了各行并添加了goBack()