Componente Auth y función hash

287 views
Skip to first unread message

jordicakephp

unread,
Nov 19, 2008, 12:59:09 PM11/19/08
to CakePHP en Español
Hola grupo,

Finalmente creo haber implementado correctamente la autenticación con
Auth pero no puedo acceder a la parte protegida del programa. Creo que
esto pasa porque, si entendí bien, Auth aplica una función hash a la
contraseña que introduce el usuario en el formulario. Yo inserté un
usuario de pruebas y su contraseña directamente en el monitor MySQL y
la contraseña no está encriptada, de forma que nunca coincidirán y por
eso (creo) no puedo entrar en la parte privada. ¿Cómo puedo hacer para
guardar la contraseña encriptada y que coincida con la función que le
aplica Auth? Gracias de antemano y un saludo. Jordi

david hc

unread,
Nov 19, 2008, 1:53:05 PM11/19/08
to cakep...@googlegroups.com
UPDATE tabla SET password = MD5(password) WHERE condiciones;

Con eso pasaras a md5 la contraseña actual.

:wq!

2008/11/19 jordicakephp <jordic...@gmail.com>:

José Lorenzo

unread,
Nov 19, 2008, 2:24:56 PM11/19/08
to cakep...@googlegroups.com
No david, eso no va a funcionar: lo mejor que puedes hacer es:

poner en beforeFilter de app_controller momentaneamente:

$this->Auth->allow();

Y cargar un nuevo usuario desde tu interfaz cakephp. Eso ya te guardara la clave encriptada como tiene que ser.

Finalmente puedes quitar la linea de allow() del beforeFilter

2008/11/20 david hc <dav...@gmail.com>

José Lorenzo

unread,
Nov 19, 2008, 2:25:36 PM11/19/08
to cakep...@googlegroups.com
Lo de david no funciona porque cake no encripta con md5, sino sha1... ademas le agrega al string de passord el string de Security.salt que se encuentra en core.php

2008/11/20 José Lorenzo <jose...@gmail.com>

jordicakephp

unread,
Nov 20, 2008, 3:45:55 AM11/20/08
to CakePHP en Español
Muchas gracias, José Lorenzo

Si te entendí bien, sucede que esta aplicación no tiene ninguna
interfaz desde la que el usuario se da de alta (lo hace el
administrador) y no hay, por lo tanto, ningún script PHP que se
encargue de encriptar la contraseña. Supongo que debe haber alguna
forma de decirle a Auth que no encripte, pero no he encontrado la
forma de hacerlo. De todas formas, ¿cómo haríais para que todo
encajara en este escenario?: un administrador da de alta manualmente a
los usuarios, desde el monitor MySQL. Supongo que propones esto José
Lorenzo para que la encriptación se haga siempre desde Cake,
utilizando el valor de Security.salt, ¿cierto? Voy a probar de poner
momentáneamente $this->Auth->allow(). Muchas gracias y un saludo.
Jordi

On 19 nov, 20:24, "José Lorenzo" <jose....@gmail.com> wrote:
> No david, eso no va a funcionar: lo mejor que puedes hacer es:
>
> poner en beforeFilter de app_controller momentaneamente:
>
> $this->Auth->allow();
>
> Y cargar un nuevo usuario desde tu interfaz cakephp. Eso ya te guardara la
> clave encriptada como tiene que ser.
>
> Finalmente puedes quitar la linea de allow() del beforeFilter
>
> 2008/11/20 david hc <davi...@gmail.com>
>
>
>
>
>
> > UPDATE tabla SET password = MD5(password) WHERE condiciones;
>
> > Con eso pasaras a md5 la contraseña actual.
>
> > :wq!
>
> > 2008/11/19 jordicakephp <jordicake...@gmail.com>:
>
> > > Hola grupo,
>
> > > Finalmente creo haber implementado correctamente la autenticación con
> > > Auth pero no puedo acceder a la parte protegida del programa. Creo que
> > > esto pasa porque, si entendí bien, Auth aplica una función hash a la
> > > contraseña que introduce el usuario en el formulario. Yo inserté un
> > > usuario de pruebas y su contraseña directamente en el monitor MySQL y
> > > la contraseña no está encriptada, de forma que nunca coincidirán y por
> > > eso (creo) no puedo entrar en la parte privada. ¿Cómo puedo hacer para
> > > guardar la contraseña encriptada y que coincida con la función que le
> > > aplica Auth? Gracias de antemano y un saludo. Jordi- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

david hc

unread,
Nov 20, 2008, 3:54:37 AM11/20/08
to cakep...@googlegroups.com
Te aseguro q

2008/11/19 José Lorenzo <jose...@gmail.com>:

david hc

unread,
Nov 20, 2008, 3:56:13 AM11/20/08
to cakep...@googlegroups.com
Perdón, le di a enviar sin querer...
Te aseguro que yo guardo en MD5 las contraseñas y hago login con normalidad.

2008/11/19 José Lorenzo <jose...@gmail.com>:

jordicakephp

unread,
Nov 20, 2008, 4:24:26 AM11/20/08
to CakePHP en Español
Hola David,

He probado lo que dices y funciona. Más exactamente:

1. Aplico una función hash al password en el monitor MySQL, como
indicabas antes

update usuarios set password=md5(password) where id=1;

2. Luego, en el core.php, vacío el Security.salt:

Configure::write('Security.salt', '');

3. Finalmente, en el beforeFilter del controlador, indico el algoritmo
hash que quiero aplicar:

function beforeFilter(){
Security::setHash('md5');
}

Así funciona... y puedo entrar en la parte privada. Me ha servido este
enlace:

http://pjhile.com/changing-the-cakephp-auth-component-password-hash

Que también propone otra solución: extender la clase Auth y
sobreescribir AuthComponent::password ($password) function.

¡Gracias por vuestra ayuda y un saludo! A ver si en un momento de más
calma aclaramos esto de las funciones hash de Auth, jeje. A mí, con el
md5 de David y con este pequeño cambio me funciona. Pero he tenido que
vaciar el Security.salt... Un saludo. Jordi



On 20 nov, 09:56, "david hc" <davi...@gmail.com> wrote:
> Perdón, le di a enviar sin querer...
> Te aseguro que yo guardo en MD5 las contraseñas y hago login con normalidad.
>
> 2008/11/19 José Lorenzo <jose....@gmail.com>:
>
>
>
> > Lo de david no funciona porque cake no encripta con md5, sino sha1... ademas
> > le agrega al string de passord el string de Security.salt que se encuentra
> > en core.php
>
> > 2008/11/20 José Lorenzo <jose....@gmail.com>
>
> >> No david, eso no va a funcionar: lo mejor que puedes hacer es:
>
> >> poner en beforeFilter de app_controller momentaneamente:
>
> >> $this->Auth->allow();
>
> >> Y cargar un nuevo usuario desde tu interfaz cakephp. Eso ya te guardara la
> >> clave encriptada como tiene que ser.
>
> >> Finalmente puedes quitar la linea de allow() del beforeFilter
>
> >> 2008/11/20 david hc <davi...@gmail.com>
>
> >>> UPDATE tabla SET password = MD5(password) WHERE condiciones;
>
> >>> Con eso pasaras a md5 la contraseña actual.
>
> >>> :wq!
>
> >>> 2008/11/19 jordicakephp <jordicake...@gmail.com>:
>
> >>> > Hola grupo,
>
> >>> > Finalmente creo haber implementado correctamente la autenticación con
> >>> > Auth pero no puedo acceder a la parte protegida del programa. Creo que
> >>> > esto pasa porque, si entendí bien, Auth aplica una función hash a la
> >>> > contraseña que introduce el usuario en el formulario. Yo inserté un
> >>> > usuario de pruebas y su contraseña directamente en el monitor MySQL y
> >>> > la contraseña no está encriptada, de forma que nunca coincidirán y por
> >>> > eso (creo) no puedo entrar en la parte privada. ¿Cómo puedo hacer para
> >>> > guardar la contraseña encriptada y que coincida con la función que le

AD7six

unread,
Nov 20, 2008, 4:44:12 AM11/20/08
to CakePHP en Español


On Nov 20, 10:24 am, jordicakephp <jordicake...@gmail.com> wrote:
> Hola David,
>
> He probado lo que dices y funciona. Más exactamente:
>
> 1. Aplico una función hash al password en el monitor MySQL, como
> indicabas antes
>
> update usuarios set password=md5(password) where id=1;
>
> 2. Luego, en el core.php, vacío el Security.salt:
>
> Configure::write('Security.salt', '');

<sigh>. contraseña inseguras, cookies inseguros, sitio inseguro..

jordicakephp

unread,
Nov 20, 2008, 5:09:13 AM11/20/08
to CakePHP en Español
Hola,

Pues no estaría mal una pequeña ayudita.. jeje ;-). Estoy ahora aquí:
http://blog.awpny.com/2008/07/cakephp-12-rc2-security-component/

Si entiendo bien, Auth utiliza el Security.salt para la función hash.
Esto quiere decir que cuando el usuario introduce su contraseña en el
formulario del login, entonces, Auth compara la salida de su función
hash con la contraseña que está en la base de datos, ¿no? Pero,
siguiendo este razonamiento, la contraseña encriptada de la base de
datos nunca coincidirá con la que genera Auth, porque la salida del
hash de MySQL no utiliza el Security.salt de CakePHP. Entonces, ¿cómo
hago para que coincidan las dos contraseñas encriptadas? Gracias de
antemano y un saludo. Jordi.

AD7six

unread,
Nov 20, 2008, 5:22:56 AM11/20/08
to CakePHP en Español


On Nov 20, 11:09 am, jordicakephp <jordicake...@gmail.com> wrote:
> Hola,
>
> Pues no estaría mal una pequeña ayudita..

Lo siento - No tengo ganas para repetir lo que hay en el book (otro
vez).

AD

jordicakephp

unread,
Nov 20, 2008, 5:38:36 AM11/20/08
to CakePHP en Español

AD7six

unread,
Nov 20, 2008, 5:53:56 AM11/20/08
to CakePHP en Español


On Nov 20, 11:38 am, jordicakephp <jordicake...@gmail.com> wrote:
> Ok, ya me espabilo.
>
> Voy explicando enhttp://tutorialcakephp.wordpress.com/2008/11/20/20-de-noviembre-de-20...
>
> Un slaudo

Ti doy un ejemplo, de porque este pregunta indica no has leido nada
(del book especialmente) y porque para mi es irritante.

Class UsersController extends AppController {
var $components = array('Auth');
function beforeFilter() { /* $this->Auth->siNecessario..*/ }
function login() {}
funciton register() {
if ($this->data && $this->User->save($this->data)) {
echo 'Usuario creado - login'; die;
}
}
}

hecho. No hay nada especial necessario en las vistas. Ademas si
intentes hacer login y no tienes la contraseña correcta - parece en el
sql log - que puedes copiar facilmente para correjir un usuario creado
con la contraseña incorrecta.

AD

jordicakephp

unread,
Nov 20, 2008, 6:26:10 AM11/20/08
to CakePHP en Español
Gracias AD7six,

Todavía no he probado una acción register como la que pones aquí.
Supongo que Cake 1.2 se encarga de encriptar la contraseña que
introduce el usuario cuando se registra y en ese caso sí veo que las
contraseñas coinciden. Mi programa era un poco distinto en el sentido
de que no es el usuario quien se registra, sino que, hasta ahora, el
administrador lo daba de alta en la base de datos, sin pasar por
Cake... No se me había ocurrido lo del sql log... Me leo el manual ;-)
Muchas gracias y un saludo. Jrodi
Reply all
Reply to author
Forward
0 new messages