1

Yiiアプリケーションでnginxサーバーを使用しています。

私の問題は、Yii::app()->user->returnUrlログインが成功した後にリダイレクトするSiteController.phpのの値が、どのページから来たかに関係なく、常に--mysite/index.phpであるということです。

前のページのURLの値になるように修正するにはどうすればよいですか?

4

1 に答える 1

3

いくつかの選択肢があることを変更したい場合は、これがデフォルトの動作です。これらの選択の同じ部分は、CWebUser を拡張して機能を追加する必要があるということです。

class WebUser extends CWebUser
{
}

&構成でそれを必要とし、言及する

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

完了、次は選択です!必要な returnUrl が固定されている場合は、関数 beforeLogin で設定します。この関数を WebUser クラスでオーバーライドし、returnUrl を手動で設定する必要があります。詳細については、公式 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]));
    }
于 2013-02-16T18:58:31.600 に答える