5

Tengo problemas para hacer que el componente Auth realice los redireccionamientos que quiero en una aplicación CakePHP 1.2.6.Problema de redirección de componente de autenticación de CakePHP

Tengo un formulario de inicio de sesión que aparece en todas las páginas y quiero mantener al usuario en la página que inicia sesión. Por ejemplo, si está viendo el perfil de otro usuario, quiero mantenerlo allí después de iniciar sesión, no redirigirlo a la acción $this->Auth->loginRedirect. Además, otra cosa sobre mi aplicación es que no tengo páginas de "acceso autenticado solamente", cada página es accesible para todos, pero si estás conectado, obtienes funciones adicionales.

lo que entendí de la lectura de la documentation es que necesito fijar autoRedirect en false para obtener el código de la función de inicio de sesión() para ser ejecutado:

class UsersController extends AppController {  
    var $name = 'Users'; 
    var $helpers = array('Html', 'Form','Text'); 

    function beforeFilter() { 
     $this->Auth->autoRedirect = false; 
    } 

    function login() { 
     $this->redirect($this->referer()); 
    } 

    function logout() { 
     $this->redirect($this->Auth->logout()); 
    } 

    /* [...] */ 
} 

Esto rompe actualmente mi autenticación. Me di cuenta (de los registros) que si dejo el redireccionamiento en la función de inicio de sesión y establezco autoRedirect en falso, el campo de contraseña en $this->data en la función login() aparece como vacío.

A continuación, acabo de publicar el contenido del AppController que se relacionan con el componente Auth:

public function beforeFilter() { 

    $this->Auth->fields = array(
     'username' => 'email',    
     'password' => 'password'    
    ); 

    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');  
    $this->Auth->loginRedirect = array('controller' => 'usercars', 'action' => 'homepage'); 

    $this->allowAccess(); 

    // build wishlist if the user is logged in 
    if ($currentUser = $this->Auth->user()) { 
     $wishlists = $this->buildWishlist($currentUser); 
     $this->set('wishlists', $wishlists); 
    } 

} 

private function allowAccess() { 
     if(in_array($this->name, /* all my controller names */)) { 
      $this->Auth->allow('*'); 
     } 
} 

Me parece que no puede entender lo que estoy haciendo mal.

Respuesta

10

Agregar parent :: beforeFilter(); a beforeFilter en el controlador de usuario:

function beforeFilter() { 
    $this->Auth->autoRedirect = false; 
    parent::beforeFilter(); 
} 

También puede reemplazar la redirección con este método a la entrada de su controlador de usuario:

$this->redirect($this->Auth->redirect()); 

Auth-> redirect() devuelve la URL donde el usuario aterrizó antes de ser llevado a la página de inicio de sesión o Auth-> loginRedirect.

+0

Gracias: D. Llamar al padre me olvidó por completo. –

0

poner este código a su controlador:

function beforeFilter() { 
    $this->Auth->allow('login', 'logout'); 
    $this->Auth->autoRedirect = false; 
    parent::beforeFilter(); 
} 

y, anadir este para la página de inicio de sesión:

function login() { 
    if($this->Auth->User()) { 
     $this->redirect(array('action'=>'welcome'), null, true); 
    } 
} 
Cuestiones relacionadas