在nginx服务器上使用Yii returnUrl

时间:2012-11-07 13:34:45

标签: nginx yii returnurl

我正在使用带有Yii应用程序的nginx服务器。

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

如何将其修复为上一页网址的值?

1 个答案:

答案 0 :(得分: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'));
}

&安培;成功登录后,最后一步阻止循环

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