2012-11-07 4 views
1

Yii 응용 프로그램과 nginx 서버를 사용하고 있습니다.nginx 서버에서 Yii returnUrl 사용

내 문제는 성공한 로그인 후 리다이렉트하는 SiteController.php에있는 Yii::app()->user->returnUrl의 값은 내가 어떤 페이지에서 왔는지에 관계없이 항상 mysite/index.php라는 것입니다.

어떻게 이전 페이지 URL의 값으로 수정할 수 있습니까?

+1

양식을 제출하기 전에'Yii :: app() -> user-> returnUrl = 'previous/page/url'; – Stu

+0

번호. 내 actionLogin에서 Yii :: app() -> user-> returnUrl의 값을 확인하면 이미 '이전/페이지/url'대신 'mysite/index.php'로 설정되어 있습니다. – user1806263

답변

3

일부 변경 사항을 변경하려는 경우 표시되는 기본 동작입니다. 이러한 선택의 동일한 부분은 당신이 CWebUser을 확장하고 당신이 필요로하는 기능

class WebUser extends CWebUser 
{ 
} 

&을 추가하고 선택을 지금 수행 한 설정

'user'=>array(
    'class' => 'WebUser', 
    'loginUrl' => array('user/login'), 
    'defaultDashboard' => array('user/dashboard'), 
) 

에서 그것을 언급해야한다는 것입니다! 원하는 returnUrl이 beforeLogin 함수에서 고정 된 경우 WebUser 클래스에서이 함수를 재정의하고 returnUrl을 수동으로 설정해야합니다. 자세한 정보는 Official API for CWebUser입니다. 그러나 returnUrl가 & 고정되어 있지 않은 경우 당신이 당신이 loginRequired 기능

public function loginRequired() { 
    $app=Yii::app(); 
    $request=$app->getRequest(); 
    $controller=$app->controller; 
    $actionParameters=$controller->actionParams; 

    if(!$request->getIsAjaxRequest()) { 
     if(empty($actionParameters)) 
      $this->setReturnUrl(array($controller->route)); 
     else 
      $this->setReturnUrl(array($controller->route,$actionParameters)); 
    } 
    if(($url=$this->loginUrl)!==null) { 
     if(is_array($url)) { 
      $route=isset($url[0]) ? $url[0] : $app->defaultController; 
      $url=$app->createUrl($route,array_splice($url,1)); 
     } 
     $request->redirect($url); 
    } 
    else 
     throw new CHttpException(403,Yii::t('yii','Login Required')); 
} 

&에게 마지막 단계를 오버라이드 (override) 할 필요가 로그인을 필요로 모든 작업을 거의 설정하려면이 성공적으로 로그인 한 후 루프를 방지

if($model->validate() && $model->login()){ 
    $returnUrl=Yii::app()->user->returnUrl; 
    $url=(is_array($returnUrl))?$returnUrl[0]:$returnUrl; 
    if(isset($returnUrl)&&stripos(strtolower($url),'logout')==false&&stripos(strtolower($url),'login')==false) { 
     $this->redirect($this->createUrl($returnUrl[0],$returnUrl[1])); 
    } else { 
     $this->redirect($this->createUrl($returnUrl[0],$returnUrl[1])); 
    }