это может быть отметка времени в вашей базе данных
в пользовательской модели функция "can_reset_password"
использует UNIX_TIMESTAMP (new_password_requested)
Вы можете повторить $ user_id и $ new_pass_key, если они верны, тогда проблема в сравнении времени.
исправить URL, чтобы всегда получать последние два сегмента
$break =$this->uri->total_segments();
$new_pass_key= $this->uri->segment($break);
$user_id= $this->uri->segment($break-1);
для отметки времени попробуйте это для функции reset_password в пользовательской модели
function reset_password($user_id, $new_pass, $new_pass_key, $expire_period = 900)
{
$this->load->helper('date');
$this->db->set('password', $new_pass);
$this->db->set('new_password_key', NULL);
$this->db->set('new_password_requested', NULL);
$this->db->where('id', $user_id);
$this->db->where('new_password_key', $new_pass_key);
$this->db->where('UNIX_TIMESTAMP(new_password_requested) >=',mysql_to_unix( time() - $expire_period));
$this->db->update($this->table_name);
return $this->db->affected_rows() > 0;
}