IIC2513-2020-2 / syllabus

Material e información del curso
23 stars 7 forks source link

hooks { BeforeSave..} no hace nada #54

Closed crvargasu closed 4 years ago

crvargasu commented 4 years ago

Hola, estoy implementando la parte del encriptado de la contraseña y al realizar la función hooks en el modelo no se entra a la beforeSave, lo tengo similar a lo mostrado en clases, de la siguiente manera:

hooks: { beforeSave: async (user) => { console.log("se llego aca"); if (user.changed('contrasena')) { console.log("entramos aca"); } } }

Por qué motivo podría no estar entrando a la funcion? Ya revisé la bdd y se graban correctamente los cambios

sivicencio commented 4 years ago

Hola. En principio no veo nada malo en el código que incluiste. ¿Lo agregaste dentro del objeto que se pasa como tercer argumento a sequelize.define? Otra cosa que podrías intentar es utilizar otro nombre de variable en vez de user. Podría ser que tenga conflicto con alguna otra variable seteada en el mismo archivo (no lo veo tan probable, pero "por si acaso").

crvargasu commented 4 years ago

Al parecer está todo bien, solo se activa el código cuando se crea un usuario, y no cuando se edita la contraseña, a pesar de que en ambos persistan los datos en la bdd. Podrá haber una diferencia entre update y save?

sivicencio commented 4 years ago

La diferencia es precisamente que beforeUpdate es sólo al actualizar, y beforeSave es al crear o actualizar, por lo que debería funcionar bien. Aquí está la documentación: https://sequelize.org/master/manual/hooks.html

¿Probaste con otro campo? ¿Por ejemplo sólo el nombre del usuario? Para ver si se comporta como debería, o si tampoco funciona con otro campo. ¿Estás seguro de que el campo se llama contrasena y no contraseña? ¿La implementación del create es similar a la del update (en cuanto a formulario y/o manejo del usuario a modificar)? Son algunas de las cosas que se me ocurre verificar.

crvargasu commented 4 years ago

Hemos probado todo, ya revisamos el código con otro integrante del grupo y no sabemos que es en realidad. El update no nos funciona para nada, y el save solo para crear. Ya hemos checkeado y los nombres de las actualizaciones si persisten en la base de datos, solo no entra a la función.

meretamal commented 4 years ago

Para los que lleguen a tener un problema similar, para actualizar la información del usuario se estaba usando model.update en vez de instance.update y el hook beforeSave es un hook de instancia, por lo que no corría al actualizar el recurso.

Acá hay más información sobre los hooks si es que a alguien le interesa 👀