成功登录Yii后返回上次输入的URL

ecr0jaav  于 2022-11-09  发布在  其他
关注(0)|答案(7)|浏览(112)

我有函数登录在其成功的函数控制转到dashboard/index。假设一个用户输入leads/index的页面回来登录由于访问规则的定义,我只是希望成功登录后,控制转到最后一个URL输入leads/index

vqlkdk9b

vqlkdk9b1#

... Controller extends CController (){
...
public function init() {

   if($this->isValidForRedirectRequest(Yii::app()->request)){
       Yii::app()->user->returnUrl = Yii::app()->request->requestUri;
   }
}
...

public function isValidForRedirectRequest(){
   /*something validations of request, like isAjax or other */
}
}...

... LoginController()...{

if($authIdentity->authenticate()) $this->redirect(Yii::app()->user->returnUrl);
...

}
wr98u20j

wr98u20j2#

我认为这将工作:

Yii::app()->user->setReturnUrl("Your url");

然后使用,

$this->redirect(Yii::app()->user->returnUrl);

以重新导向。
或者您也可以使用会话帮助。
登录前设置

Yii::app()->session['beforelogin'] = Yii::app()->request->requestUri;`

登录检查后重定向之前

if(isset(Yii::app()->session['beforelogin'])) {
  $this->redirect(Yii::app()->session['beforelogin']);
}
dxpyg8gm

dxpyg8gm3#

我认为这个问题最简单的答案是这个代码:

$this->redirect(Yii::app()->request->urlReferrer);

使用这个代码就是这样。

jxct1oxe

jxct1oxe4#

SiteController中使用$this->redirect(Yii::app()->user->returnUrl)

public function actionLogin() {
    $this->setTheme();
    $this->layout = '//layouts/login';
    $model = new LoginForm;

    // if it is ajax validation request
    if (isset($_POST['ajax']) && $_POST['ajax'] === 'login-form') {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if (isset($_POST['LoginForm'])) {
        $model->attributes = $_POST['LoginForm'];
        // validate user input and redirect to the previous page if valid
        if ($model->validate() && $model->login())
            $this->redirect(Yii::app()->user->returnUrl);
    }
    // display the login form
    $this->render('login', array('model' => $model));
}
9o685dep

9o685dep5#

为了Yii2

在方法actionLogin()的控制器中,使用以下命令:

if (Yii::$app->user->getReturnUrl() == '/') {
  return $this->redirect('dashboard/index');
} else {
  return $this->redirect(Yii::$app->user->getReturnUrl());
}

它会检查登录是否来自主页(getReturnUrl() == '/'),然后在登录后它会将您重定向到dashboard/index页面。否则,它会重定向到所请求的页面。

vatpfxk5

vatpfxk56#

最好通过会话控制该行为(例如分页...),但是,

return $this->goBack();

都可以。

xurqigkl

xurqigkl7#

当actionID=auth时有一个条件,因此它只在action是auth时才起作用,这会打开Google auth窗口。

public function beforeAction($action){
  if ($action->id == 'auth' && Yii::$app->request->referrer !== null) {
        Yii::$app->session->set('returnUrl', Yii::$app->request->referrer);
  }
 return parent::beforeAction($action);
}

相关问题