Hola Comunidad.!
Tengo un problema en la función (método) que le muestro a continuación.
Sucede que yo quiero que los usuarios autenticados puedan cambiar sus datos de usuario en la base de datos es decir (Nombre, email ó clave). Cuando un usuario cambia su nombre, email y no modifica su clave todo marcha bien, se actualizan sus datos y el usuario continúa autenticado. Pero cuando el usuario autenticado cambia la clave Codeigniter me cierra la sessión y el usuario tiene que volver a loguearse con la clave nueva, que creen ustedes que pueda estar ocurriendo.
Me inspiré para realizar mi sistema de autenticación en la clase controlador usuarios y la librería centinela de noquieroprogramar.com
Saludos.
Vista
Código:
//Le paso el Nick por URL del usuario autenticado
//http://localhost/aseguro/index.php/usuarios/chgpw/avali2
function chgpw($nick=""){
if($nick!=""){
$nick=$this->uri->segment(3);
$this->load->library('validation');
$reglas['nombre'] ="required|min_length[8]|max_length[50]|xss_clean";
$reglas['mail'] ="trim|required|valid_email";
$reglas['newclave'] ="trim|required|min_length[4]|max_length[12]|matches[r_clave]";
$reglas['r_clave'] ="trim|required";
$reglas['oldclave'] ="trim|required|min_length[4]|max_length[12]|callback__check_oldclave";
$this->validation->set_rules($reglas);
$campos['nombre'] ="<b>Nombre y Apellidos</b>";
$campos['mail'] ="<b>Correo Electrónico</b>";
$campos['oldclave'] ="<b>Contraseña actual</b>";
$campos['newclave'] ="<b>Contraseña nueva</b>";
$campos['r_clave'] ="<b>Repetir Contraseña</b>";
$this->validation->set_fields($campos);
$this->validation->set_error_delimiters('<em>', '</em>');
if(!$this->validation->run())
{
$this->db->where('nick', $nick);
$q = $this->db->get('usuarios');
$data['query']=$q;
$this->load->view("cabecera");
$this->load->view('usuarios/chgpw',$data);
$this->load->view("pie");
}
else
{
$nombre=$this->input->post('nombre');
$newclave=sha1($this->input->post('newclave'));
$mail=$this->input->post('mail');
$update = array(
'nombre' => $nombre,
'clave' => $newclave,
'mail' => $mail
);
$this->db->where('nick', $nick);
$this->db->update('usuarios', $update);
redirect('usuarios/index/update_ok');
}
}
else {
$this->load->view("cabecera");
$this->load->view("usuarios/error");
$this->load->view("pie");
}
}