NuBuMu

Wednesday, February 04, 2009

$current_user

Pues finalmente lo encontre y... la verdad es que no se si tirarme al tren o a la maquinista :)

A ver, el asunto funciona de la siguiente manera: $current_user no es una variable global como yo creia... vaaaaaaya!

De donde viene la confusion? de estos 5 archivos:
  • config.php
  • user.php
  • libs/user.php
  • login.php
  • libs/login.php <- Este es el maldito rodeor que tantos dolores de cabeza me ha dado!!!
Vale, vamos por pasos.

En config.php hay una entrada, en la que no me habia fijado, o mejor dicho, en la que no me habia fijado lo suficiente (la penultima, para mas inri!):

include mnminclude.'login.php';

Yo, apresurado de la moda juvenil, me fui de cabeza a mirar que habia en ./login.php sin ver nada que me resolviera mi terrible duda: Donde se declara/inicializa la maldita variable!!!!

Que hay en include mnminclude.'login.php': Una bonita clase que se llama "AuthUser" (!!!!!!) no me pregunteis por que el Sr. Ricardo Galli decidio tener una clase en un archivo de nombre diferente... para confundirme a mi y al resto de los pescados, imagino.

Bueno, que pasa, que al final de dicha clase, cosa que tambien se me habia pasado por alto... hay una sentencia que dice asi:
// No es verdad angel de amor...
$current_user = new UserAuth();
Los comentarios son mios, pero voy a pedirle a Ricardo que los incluya en su codigo para la posteridad cosa que, por supuesto, ignorara...

So, resumiendo. En todas las paginas se hace un include del config.php cosa que hace que en cada pagina se incluya tambien dicha clase: UserAuth bajo el oscuro nombre de login.php... y que ademas, en cada pagina, se cree un objeto llamado (famoso) $current_user y que se inicializa mediante tremendo constructor-of-the-death.

Vale, me ha quedado claro... o sea, que en cada pagina, se inicializa el usuario y se recuperan los detalles desde la "databass" (por favor, si alguien lee esto, que lo haga usando acento frances).

Vale, si estas autentificado, deberias tener una cookie con dos claves: mnm_user (meneame user) y mnm_key (meneame key). Ademas, en el $_REQUEST te vendra un parametro mnm_key que ha de coincidir con el de la cookie. (Esto se hace por seguridad, y no para volver loco al "probe pogramador" que lee el codigo de Ricardo). Una vez se tienen esos datos, se va a la databass, se chupa la info de la fila, y ala, objeto $current_user habemus.

Asi que con esto y un bizcocho, hemos resuelto el problema del usuario que no existia... :)

y en PHP?

Despues de pasarme un dia entero maldiciendo el obscurantismo del php, creo que he aprendido algunas cosas que, hasta ahora, ni me habia planteado.

Tengo una mini aplicacion que he hecho primero en Java usando JSF, Apache Faces, iBatis y demas frameworks. Ayer me puse a recodificar dicha applicacion en PHP... por que? por que en Java la arquitectura esta muy bonita y tal, pero hay dos problemas: el precio del hosting es, de momento, prohibitivo, y la escalabilidad es bastante compleja... ademas, de como tengo tiempo y no tengo dinero, pos mejor me paso a php y aprendo.

Por que no Rails? por que me da miedo que me vuelva a pasar lo mismo que con java, que escalar la aplicacion no sea sencillo... y eso que ya cuento con que lo voy a ejecutar en Amazon, pero bueno, seguro que con php puedo controlarlo mas. Lo dicho, tengo tiempo :) y no tengo dinero.

Vale, primero problema: la gestion de usuarios. Que hago? pos me voy, me descargo codigo que ya tiene ese problema resuelto desde hace siglos e intento aplicarlo a mi caso. Problema? no funciona. Problema mas gordo aun? no encontre en ninguna parte como funcionaba.

Cuando haces gestion de usuarios: login, autentificaciones, etc... Esta el metodo de coger y guardar objetos en la session ($_SESSION) o tenr una variable global que hace, mas o menos lo mismo.

Meneame y Wordpress usan el metodo de la variable global $current_user y en internet hay mogollon de ejemplos de como guardar objetos en la session.

Claro, yo queria saber como narices, se hace para tener tu objeto del tipo User guardado en $current_user... nada, donde se crea esa variable... parece que es uno de los secretos mejor guardados de internet.

O sea, te miras el codigo y ves que se hacen asignaciones del tipo:

function Login(){
global $current_user,globals;

$user = new User();
// bla bla bla
$current_user = $user
}


y luego en otras partes se saca, del dicho $current_user el email o el nombre, por ejemplo:
echo $current_user->user_name;

Todo esto esta muy bien, mi lo entiende y tal pero... donde narices se crea dicha variable???

Por que si yo hago eso me dice que ni hablar, que el $current_user is blank :(

Al final, despues de pasarme todo el dia ayer para encontrar como hacerlo funcionar, abandone y lo hice guardando objetos en la session :( Vale, acepto la derrota! Php 1 - Ivan 0 :(