That's the default behavior you are seeing, if you want to change that there are some choices! The same part in these choices is that you should extend CWebUser and add the functionalities
class WebUser extends CWebUser
{
}
& you need and mention it in the config
'user'=>array(
'class' => 'WebUser',
'loginUrl' => array('user/login'),
'defaultDashboard' => array('user/dashboard'),
)
done, now the choices! if the returnUrl you want is fixed set it in function beforeLogin, you should override this function in the WebUser class and set the returnUrl manually, more info at Official API for CWebUser.
But if returnUrl is not fixed & you want it to be set almost for every action which needs login then you should override the loginRequired function
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'));
}
& the last step prevent loop after successful login
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]));
}
Yii::app()->user->returnUrl = 'previous/page/url';
before you submit the form? – Collette