Yii2 登陆后返回登陆前页面 不跳回到登陆页

时间: 2017-04-06  分类: Yii2  收藏
当用户在内容页点击导航登陆连接时, 跳转到登陆页面, 当登陆成功后, yii2默认代码是返回到首页,即$this->goHome();
这样对体验不好, 用户还要再去找原来的内容, 当然如果登陆做成弹窗的形式可以解决问题,但登陆页我感觉还是适当的用比较好,还可以做宣传图在上面,
yii2有个$this->goBack()的方法, 但这里不适用 , 因为登陆页登陆后会post提交, 然后再返回, 返回的时候使用 $this->goBack() 被返回的页面是post提交前的页面,即登陆页

我的解决办法是用referrer,将referrer保存到登陆表单,然后再用路由判断不跳回到登陆页

控制器
    public function actionLogin() {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }
        $model = new LoginForm();
        if($model->load(Yii::$app->request->post()) && $model->login()) {
            $referrer=Yii::$app->request->post('referrer');
            $loginUrl=Yii::$app->user->loginUrl;
            if($referrer && Yii::$app->requestedRoute!=$loginUrl[0]) {
                $this->redirect($referrer);
            } else {
                return $this->goHome();
            }
        } else {
            return $this->render('login', [
                'model' => $model,
                'referrer' => Yii::$app->request->referrer?Yii::$app->request->referrer:'',
            ]);
        }
    }

控制器代码中的'referrer' => Yii::$app->request->referrer?Yii::$app->request->referrer:'',用于记录跳转到登陆页的页面地址,然后将此地址记录到表单,如下
模板
<?php $form = ActiveForm::begin(['id' => 'login-form','options'=>['class'=>'form']]); ?>
<input type="hidden" name="referrer" value="<?= $referrer; ?>" />

这样就可以解决跳转到登陆前页面的问题,

不跳回到登陆页
如上的方式可以跳转到登陆前的页面, 但当用户点击进入登陆页,然后在登陆页面再次点击登陆连接, 模板中会记录返回连接为登陆页的地址, 然后登陆成功后返回到登陆页,提交403错误,即没权限访问
然后控制器里有几行代码如下:

$referrer=Yii::$app->request->post('referrer');
$loginUrl=Yii::$app->user->loginUrl;
if($referrer && Yii::$app->requestedRoute!=$loginUrl[0]) {
    $this->redirect($referrer);
} else {
    return $this->goHome();
}

如上几行控制器代码,用来判断来源路由是否为loginurl(main,php配置中的参数,没权限跳转的地址),如果是,则跳到首页,
分享到:

评论

昵 称:
游客359190
0232323
04-12 15:37