Pregunta

Tengo un User objeto de que, después de la autenticación es correcta, está metido en la sesión (sans seguridad de la información) para su fácil recuperación y para determinar si tenemos un usuario autenticado o de sesión anónimo.Hay varios caminos por los que el usuario puede modificar todos o algunos de su información y me gustaría seguir con ese valor de la sesión hasta la fecha.La respuesta obvia es para actualizar el valor de la afterSave() devolución de llamada, pero que, por supuesto, viola MVC.

Hay otra manera de capturar cada cambio en un lugar, así que no tengo que soltar sesión escribe todo el lugar?Yo no puedo pensar en nada, ni he sido capaz de encontrar otras ideas.Soy la única persona que está tratando de hacer algo como esto?

Gracias.

Solución Final:He marcado neilcrookes respuesta como la respuesta, francamente, porque no parece ser el mejor camino.Ya que de esta manera viole mi TOC sentidos, sin embargo, me tomó un camino ligeramente diferente.Me decidí a tener mi User::authenticate() método de devolución el usuario autenticado objeto para el llamante por lo que puede hacer lo que quiera con ella.Una de las cosas que a los que llaman "quieren" hacer es colocar este valor en la sesión.Es una redundancia, pero es muy, muy limitado.En mi mente, de que se sentía mejor que acceder a la sesión de la modelo (aunque ciertamente un maldito si lo haces, maldito si no escenario).

¿Fue útil?

Solución

Algunos pueden estar en desacuerdo pero me gustaría tornillo MVC, hacerlo de Modelo :: afterSave () y usar $ _SESSION - comprueba la sesión antes de escribir en él, en caso de que no se ha iniciado, por ejemplo, que está guardando en contra del modelo de una concha o algo.

MVC es un patrón general - una guía, que puede golpear su cabeza contra ella tratando de encontrar la manera de lograr algo que no encaja, o simplemente hacer de otra manera y pasar a algo más importante

Trae en las llamas.

Otros consejos

//in users controller 
if ($this->User->save()) {
    $this->Auth->login($this->User->read());
    $this->Session->setFlash[.. etc]

Y para que conste, no estoy de acuerdo con la respuesta de neilcrooks, pero me abstendré de alimentar al troll.

después de guardar

Uso Como esta

$this->Session->write('Auth.User.mmid', $kinde['Kindle']['id']);

Usted debe ser capaz de usar sólo AppController para crear la devolución de llamada es necesario (s) que guardan datos de la sesión al día. Así, por ejemplo, usted podría tener su modelo User afterSave() establecer una propiedad llamada changed true. Luego, en su AppController->afterFilter() comprobar que la propiedad y actualizar los datos de la sesión si es necesario.

Como alternativa, se podría escribir un componente a través del cual para actualizar su información de usuario y datos de la sesión. Entonces, cualquier controlador que necesita para cambiar la información del usuario sólo tiene que incluir ese componente.

No hay necesidad de escribir código redundante o romper MVC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top