2012-03-10 5 views
6

Привет, ребята, у меня есть этот код в main.php конфигурационном файле:Yii ReturnUrl функция

'components' => array(
    '[.........]', 
    'user'=>array(
     // enable cookie-based authentication 
     'allowAutoLogin'=>true, 
     'autoRenewCookie' => true, 
     'returnUrl' => 'http://stackoverflow.com', 
    ) 
); 

Моя проблема заключается в том, что идентификатор не перенаправляет пользователя http://stackoverflow.com после входа в систему, пожалуйста, вы можете мне помочь?

UserController.php:

public function actionLogin() 
{ 
    if (!Yii::app()->user->isGuest){ 
     $this->redirect('/user/index'); 
     return; 
    } 

    $model=new LoginForm; 

    // if it is ajax validation request 
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form') 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 

    // collect user input data 
    if(isset($_POST['LoginForm'])) 
    { 
     $model->attributes=$_POST['LoginForm']; 
     // validate user input and redirect to the previous page if valid 
     if($model->validate() && $model->login()) 
      $this->redirect(Yii::app()->user->returnUrl); 
    } 
    // display the login form 
    $this->render('login',array('model'=>$model)); 
} 
+0

Как ваши функции входа выглядит как? – Pentium10

+0

Я обновил. – Irakli

+0

Вы используете страницу входа после перенаправления? (например, если вы не можете получить доступ к странице и перенаправляетесь на экран входа в систему). Если вы, перенаправление устанавливает returnUrl в значение исходной страницы, которое переопределяет конфигурацию/главную настройку. – Vervious

ответ

8

Я нашел решение для своей проблемы. Я добавил эти строки кода в login.php так после входа пользователя в систему он будет перенаправлять на предыдущей странице:

if (Yii::app()->request->urlReferrer != 'http://www.example.com/user/login' && 
    Yii::app()->request->urlReferrer != 'http://www.example.com/user/register') 
{ 
    Yii::app()->user->setReturnUrl(Yii::app()->request->urlReferrer); 
} 
+0

Хорошо хак ..! :-) –

+0

Если я хочу добавить динамический URL-адрес для входа вместо жестко закодированного URL-адреса, то как я могу получить этот логин для входа динамически? –

+1

Вы должны использовать '! ==' вместо '! ='. – trejder

0

Yii перезаписывает этот возвратного URL, который устанавливается в конфигурационном файле.

Вы можете определить этот возвращаемый url в параметрах или вы можете сгенерировать его с помощью функции createUrl.

1

Попробуйте это для того, чтобы следить за последней посещенной действительный URL:

Добавить к вам конфигурации :

'preload' => array(
    // preloading 'loginReturnUrlTracker' component to track the current return url that users should be redirected to after login 
    'loginReturnUrlTracker' 
), 
'components' => array(
    'loginReturnUrlTracker' => array(
     'class' => 'application.components.LoginReturnUrlTracker', 
    ), 
    ... 
), 

Поместите этот файл в компонентах/LoginReturnUrlTracker.php:

<?php 

class LoginReturnUrlTracker extends CApplicationComponent 
{ 

    public function init() 
    { 
     parent::init(); 

     $action = Yii::app()->getUrlManager()->parseUrl(Yii::app()->getRequest()); 

     // Certain actions should not be returned to after login 
     if ($action == "site/error") { 
      return true; 
     } 
     if ($action == "site/logout") { 
      return true; 
     } 
     if ($action == "site/login") { 
      return true; 
     } 

     // Keep track of the most recently visited valid url 
     Yii::app()->user->returnUrl = Yii::app()->request->url; 

    } 

}