Problema de redirección del componente de CakePHP Auth
model-view-controller authentication (2)
Tengo problemas para que el componente Auth realice los redireccionamientos que quiero en una aplicación CakePHP 1.2.6.
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í al leer la documentación es que necesito establecer autoRedirect
en falso para obtener el código en la función de inicio de sesión () que se ejecutará:
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 actualmente rompe 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 de login()
aparece como vacío.
A continuación, publiqué los contenidos de AppController relacionados con el componente de autenticación:
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(''*'');
}
}
Parece que no puedo entender lo que estoy haciendo mal.
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 esto al método de inicio de sesión 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.
Pon este código en tu controlador:
function beforeFilter() {
$this->Auth->allow(''login'', ''logout'');
$this->Auth->autoRedirect = false;
parent::beforeFilter();
}
y agregue esto para la página de inicio de sesión:
function login() {
if($this->Auth->User()) {
$this->redirect(array(''action''=>''welcome''), null, true);
}
}