Conocer el Controlador/Accion que llamo a la accion "Login"

edited julio 2010 in Dudas/Problemas
Hola, estoy usando la lib Auth, y guiandome del tutorial de paraisolinux sobre el sistema de login en kumbiaphp :
http://paraisolinux.com/sistema-de-login-en-kumbiaphp/
transcribo la parte del codigo del controlador:
function login(){
if ($this->has_post("login","password")){
$pwd = $this->post("password");
$usuario=$this->post('login');
$auth = new Auth("model", "class: usuarios", "login: $usuario", "password: $pwd");
if ($auth->authenticate()) {
$this->redirect("principal/index");
} else {
Flash::error("Falló");
}
}
}
Me surgio la siguiente duda: supongamos tengo la siguiente situacion: quiero ejecutar una accion de un controlador, la cual requiere que el usuario este registrado, al no estarlo, la accion me direcciona al controlador/accion para el login, una vez registrado seria conveniente que volviera(redireccionara) a la accion que lo llamo , y que esta se ejecute. Ahora bien, donde se guarda/guardo la referencia a la primera accion y como hago esta redireccion? podria ser algo como:
$this->redirect($this->controller_name_old . "/". $this->action_name_old)

Trate de usar el $_SERVER, pero me envia a la raiz donde esta instalado kumbiaphp. Estoy usando la beta 1.

Gracias por su ayuda.

Comentarios

  • Buenas, eso del $this->controller_name_old no sé de donde lo tomaste, eso lo puedes hacer haciendo uso del REFERER

    ¡Éxitos!
  • edited 9:00
    El REFERER puede ser una solucion, pero a veces no contiene ningun valor. Por lo que es una variable "inestable".
    Lo mejor es guardar el nombre del controlador original en una variable de sesion (por ejemplo) e invocarla luego en la accion Login. Logicamente, la variable debe ser borrada cuando redirecciones.

    Ademas, esta practica es mas segura y util, porque puedes hacer validaciones de acciones, historial de accesos, etc.
    Para sistemas complejos es mejor usar ACL

    Saludos desde Argentina. <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
  • edited 9:00
    Deivinsontejeda, gracias por tu respuesta , lo de $this->controller_name_old, lo saque de mi imaginacion, pues como $this->controller_name te da el nombre del controlador actual, NO seria una idea tonta tener una variable que guarde el controlador anterior al actual.
    Con respecto al REFERER en una pagina sin ajax no habria tanto problema
    pero si hay actualizaciones con ajax entonces el REFERER siempre es el host aun cuando se contruyan url del tipo <!-- m --><a class="postlink" href="http://host/controller/action/">http://host/controller/action/</a><!-- m -->.

    Damvaz, gracias por tu respuesta, tenes razon con lo del REFERER es inseguro, voy a investigar lo de guardar en sesiones.

    Lo de ACL lo desconocia, donde puedo interiorizarme del tema . Gracias.
  • El tema de ajax ya es complicado de por si, siempre tendras que estar enviando al servidor donde te encuentras para un determinado momento... porque como sabes en AJAX nunca se sabe donde te encuentras parados...

    Ciertamente es inestable usar el referer pero al usar ajax se sometes a eso a menos que sepas donde es util usar y como...
  • edited 9:00
    Puedes encontrar un ejemplo de ACL en http://wiki.kumbiaphp.com/Ejemplo_de_ACL_con_Spirit_Beta2.

    El tutorial te indica como parchear para spirit Beta 1

    Saludos desde Argentina!!! <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
Sign In or Register to comment.