1

我有这个登录操作:

    // if it is ajax validation request
    if(isset($_REQUEST['ajax']) && isset($_REQUEST['users']))
    {
            //echo CActiveForm::validate($model);

            $model->attributes=$_REQUEST['users'];

            $result = array();

            if($model->validate() && $model->login())
            {
                    // MONGO - START
                    DPoints::app()->dailyLogin(Yii::app()->user->id); 
                    // MONGO - END

                    $result['status'] = 'success';
                    $user = users::model()->findByPk(Yii::app()->user->id);
                    if($user->role == 'admin')
                    {
                            $result['url'] = Yii::app()->createUrl('/admin/questions');
                    }
                    else
                    {
                            $result['url'] = Yii::app()->createUrl('/user/dashboard'); 
                    }
            }
            else
            {
                    $result['status'] = 'failed';
                    $errors = $model->getErrors();
                    $result['errormessage'] = $errors;              
            }
            echo json_encode($result);
          //  $this->redirect('http://www.teddfel.hu/question/igaz-hogy-ebben-az-evben-nem-lesz-igazi-nyarunk_11289');
            return;
    }

我已经阅读了我应该$this->redirect(Yii::app()->user->returnUrl);重定向用户的地方。但是在我的示例中,我应该在哪里为用户使用该重定向?我想在登录完成后重定向用户。

4

2 回答 2

0

鉴于您的示例,您应该if($model->validate() && $model->login())在那些 if 的末尾处重定向,以防万一您不想要。

因为这意味着用户成功登录。

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('http://www.google.com');
        }
      }
于 2013-06-07T12:26:55.450 回答
0

如果是 AJAX 请求,您将无法从控制器强制重定向。相反,您需要使用相同的 AJAX 处理响应。例如:

$.ajax({
    // implementation goes here
    success: function(response) {
        var result = $.parseJSON(response);
        if (result.status === 'success') {
            document.location.href = result.url;
        }
    }
})

此外,Yii 为您提供了更好的方法来检查它是否是 AJAX 请求:

if (Yii::app()->request->isAjaxRequest) {}
于 2013-06-07T15:56:36.363 回答