2012-03-10 21 views
6

Hola chicos que tienen este código en el archivo de configuración main.php:Yii ReturnURL función

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

Mi problema es que el DI no redirige al usuario http://stackoverflow.com después de iniciar sesión, puede usted por favor me ayude?

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

¿Cómo funciona su función de inicio de sesión ¿parece? – Pentium10

+0

He actualizado. – Irakli

+0

¿Está utilizando la página de inicio de sesión después de una redirección? (por ejemplo, si no puede acceder a una página y redirige a la pantalla de inicio de sesión) Si lo está, la redirección establece returnUrl en el valor de la página original que anula la configuración/configuración principal. – Vervious

Respuesta

8

He encontrado una solución para mi problema. He añadido estas líneas de código en login.php así que después de Inicio de sesión volverá a dirigir en la página anterior:

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

buen truco ..! :-) –

+0

Si quiero agregar la URL de inicio de sesión dinámico en lugar de la URL codificada, ¿cómo puedo obtener esta URL de inicio de sesión de forma dinámica? –

+1

Debería usar '! ==' en lugar de '! ='. – trejder

0

Yii sobrescribe esta url de retorno que se encuentra en el archivo de configuración.

Puede definir esta URL de retorno en params o puede generarla a través de la función createUrl.

1

Prueba esto con el fin de realizar un seguimiento de la última URL válida visitado:

Añadir a que la configuración :

'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', 
    ), 
    ... 
), 

poner este archivo en componentes/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; 

    } 

}