nginx的服务器上使用Yii RETURNURL(Using Yii returnUrl on n

2019-07-03 15:15发布

我使用nginx的服务器Yii应用。

我的问题是价值Yii::app()->user->returnUrl ,在我SiteController.php,它重定向我后登录成功永远是- mysite的/ index.php的,无论我是从哪个页面。

我怎样才能修复它是前一页面的URL的价值?

Answer 1:

这就是你所看到的默认行为,如果你想改变,有一些选择! 在这些选择相同的是,你应该扩展CWebUser并添加功能

class WebUser extends CWebUser
{
}

&你需要的,提到它在配置

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

完成后,现在的选择! 如果你想RETURNURL固定在功能beforeLogin设置它,您应该覆盖在WEBUSER类此功能和手动设置RETURNURL,在更多信息的CWebUser官方API 。 但是,如果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'));
}

&最后一步无法成功登录后循环

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]));
    }


文章来源: Using Yii returnUrl on nginx server