Estoy aprendiendo cakephp por mi cuenta. Traté de crear un controlador de usuario con una función de contraseña de cambio. Funciona, pero no estoy seguro de si esta es la mejor manera, y no pude buscar tutoriales útiles sobre esto. Aquí está mi código:¿Existe alguna forma mejor de cambiar la contraseña de usuario en cakephp usando Auth?
class UsersController extends AppController {
var $name = 'Users';
function login() {
}
function logout() {
$this->redirect($this->Auth->logout());
}
function changepassword() {
$session=$this->Session->read();
$id=$session['Auth']['User']['id'];
$user=$this->User->find('first',array('conditions' => array('id' => $id)));
$this->set('user',$user);
if (!empty($this->data)) {
if ($this->Auth->password($this->data['User']['password'])==$user['User']['password']) {
if ($this->data['User']['passwordn']==$this->data['User']['password2']) {
// Passwords match, continue processing
$data=$this->data;
$this->data=$user;
$this->data['User']['password']=$this->Auth->password($data['User']['passwordn']);
$this->User->id=$id;
$this->User->save($this->data);
$this->Session->setFlash('Password changed.');
$this->redirect(array('controller'=>'Toners','action' => 'index'));
} else {
$this->Session->setFlash('New passwords differ.');
}
} else {
$this->Session->setFlash('Typed passwords did not match.');
}
}
}
}
contraseña es la contraseña anterior, passwordn es el nuevo, password2 es el nuevo volver a teclear. ¿Hay alguna otra manera más coomon de hacerlo en el pastel?
Niza, gracias por su respuesta, que me ayudaron a que más de la torta -me gusta. Ahora tengo un problema: no pude averiguar cómo verificar la contraseña actual en los datos con la almacenada porque no logré llamar a Auth-> contraseña ($ this-> data ['current_password']) desde el código del modelo (usuario.php). ¿Cómo hacer esto? – sipiatti
Si desea leer más acerca del enfoque que presenté, se lo conoce como "modelos gordos, controladores delgados" y se puede aplicar a cualquier marco MVC. Aunque el componente Auth no está disponible desde un modelo, todo el método 'password()' hace es llamar al método hash (contraseña, nulo, verdadero); '. – Mike
Gracias Mike, he aprendido mucho. Saludos! – sipiatti