简体   繁体   English

重设密码

[英]Resetting Password

On my user table I have a column called code. 在我的用户表上,我有一列称为代码。 If a user has clicked on the forgotten password link and enters in email and then clicks on submit. 如果用户单击了“忘记密码”链接并输入电子邮件,然后单击“提交”。 It then updates the code on to the database row matching the email . 然后,它将代码更新与电子邮件匹配的数据库行上

I have another controller called Forgotten which handles the $code and editCode that works fine. 我还有一个名为Forgotten的控制器,它可以处理正常工作的$codeeditCode

The problem I am having is I have tried a few times and will not edit/change password. 我遇到的问题是我尝试了几次,无法编辑/更改密码。 I currently have removed non working code. 我目前已删除了无效代码。

I need to be able to check make sure the $code = URI Segment 3 matches the code and email on that database row. 我需要检查以确保$code = URI Segment 3与该数据库行上的codeemail匹配。 And then allows me to update/change password. 然后允许我更新/更改密码。

Controller Reset 控制器复位

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Reset extends MX_Controller {

public function __construct() {
    parent::__construct();
  if ($this->user->hasPermissionAccess() == TRUE) {
     $this->lang->load('admin/english', 'english');
     $this->lang->load('admin/common/reset', 'english');
     $this->load->library('settings');
     $this->load->library('pagination');
     $this->load->library('request');
     $this->load->library('response');
     $this->load->library('document');
             $this->load->library('email');
  } else { 
    redirect('admin/error');
  }
}

public function index() {
    $this->document->setTitle($this->lang->line('heading_title'));

    $data['heading_title'] = $this->lang->line('heading_title');

    $data['text_password'] = $this->lang->line('text_password');

    $data['entry_password'] = $this->lang->line('entry_password');
    $data['entry_confirm'] = $this->lang->line('entry_confirm');

    $data['button_save'] = $this->lang->line('button_save');
    $data['button_cancel'] = $this->lang->line('button_cancel');

    $data['breadcrumbs'] = array();

    $data['breadcrumbs'][] = array(
        'text' => '<i class="fa fa-home"></i>' .' '.  $this->lang->line('text_home'),
        'href' => site_url('common/dashboard')
    );

    $data['breadcrumbs'][] = array(
        'text' => $this->lang->line('heading_title'),
        'href' => site_url('common/forgotten')
    );

    if (!empty($this->request->post['password'])) {
        $data['password'] = $this->request->post['password'];
    } else {
        $data['password'] = '';
    }

    if (!empty($this->request->post['confirm_password'])) {
        $data['confirm_password'] = $this->request->post['confirm_password'];
    } else {
        $data['confirm_password'] = '';
    }

    $data['action'] = site_url('admin/reset') .'/'. $this->uri->segment(3);

    $data['cancel'] = site_url('admin/login');



    $this->load->library('form_validation');

    $this->form_validation->set_rules('password', 'Password','required|trim|xss_clean|matches[confirm]|min_length[3]|max_length[25]');
    $this->form_validation->set_rules('confirm_password', 'Password Confirmation', 'required|trim');

    if ($this->form_validation->run() == FALSE) {

        return $this->load->view('common/reset', $data);

    } else {

        $this->load->model('admin/user/users_model');

        $code = $this->uri->segment(3);

        $user_info = $this->users_model->getUserByCode($code);

        if($user_info) {
            $this->load->model('admin/user/users_model');
            $this->users_model->editUser($user_info['user_id'], $this->request->post, $data);
            $this->session->set_flashdata('success', 'You have now updated your Password!');
            redirect('admin');
            return true;
        } else {
            $this->session->set_flashdata('error', 'Unable to submit changes. Please try again!');
            redirect('admin');
            return false;
        }
    }
}
}

Model 模型

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Users_model extends CI_Model {

public function addUser($data) {
 $user_insert = array(
  'user_group_id' => "10",
  'username' => $data['username'],
  'firstname' => $data['firstname'],
  'lastname' => $data['lastname'],
  'email' => $data['email'],
  'password' => $this->hash($data['password']),
  'status' => $data['status'],
  'date_added' => mdate('%Y-%m-%d %H:%i:%s', now())
);

$this->db->insert_id();
$this->db->insert($this->db->dbprefix . 'user', $user_insert);
}

public function editUser($user_id, $data) {
$data['last_updated'] = mdate('%Y-%m-%d %H:%i:%s', now());

if (isset($data['password']) && $data['password']) {
  $data['password'] = $this->hash($data['password']);
} else {
  unset($data['password']);
}

$this->db->where('user_id', $user_id)->update('user', $data);
return $user_id;
}

public function getUserByCode($code) {
    $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "user` 
    WHERE code = '" . $this->db->escape($code) . "' AND code != ''");

    return $query->row_array();
}

public function hash($password) {
$this->load->library('PasswordHash', array('iteration_count_log2' => 8, 'portable_hashes' => FALSE));
return $this->passwordhash->HashPassword($password);
}

public function editCode($email, $code) {
    $this->db->where('email', $this->request->post['email']);
    $this->db->set('code', $code);
    $this->db->update($this->db->dbprefix . 'user');
}
}

I have been working hard at problem solving last half hour but have figured out why I need to do a couple of edit password separate from edit user and added get by code. 我在过去的半小时里一直在努力解决问题,但是想出了为什么我需要做几个与编辑用户分开的编辑密码并添加按代码获取的原因。

New controller and model methods down below for my resetting password. 下面提供了用于重置密码的新控制器和模型方法。 I still have a separate forgotten controller that handles the reset code 我仍然有一个单独的被遗忘的控制器来处理重置代码

Model 模型

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Users_model extends CI_Model {

  public function addUser($data) {
    $user_insert = array(
      'user_group_id' => "10",
      'username' => $data['username'],
      'firstname' => $data['firstname'],
      'lastname' => $data['lastname'],
      'email' => $data['email'],
      'password' => $this->hash($data['password']),
      'status' => $data['status'],
      'date_added' => mdate('%Y-%m-%d %H:%i:%s', now())
    );

    $this->db->insert_id();
    $this->db->insert($this->db->dbprefix . 'user', $user_insert);
    }

    public function editUser($user_id, $data) {
    $data['last_updated'] = mdate('%Y-%m-%d %H:%i:%s', now());

    if (isset($data['password']) && $data['password']) {
      $data['password'] = $this->hash($data['password']);
    } else {
      unset($data['password']);
    }

    $this->db->where('user_id', $user_id)->update('user', $data);
    return $user_id;
    }

    public function editPassword($user_id, $password) {

        $data['password'] = $this->request->post['password'];

        $this->db->query("UPDATE `" . $this->db->dbprefix . "user` 
        SET  
        password = " . $this->db->escape($this->hash($data['password'])) . ", 
        code = '' 
        WHERE 
        user_id = '" . (int)$user_id . "'");
    }

    public function hash($password) {
    $this->load->library('PasswordHash', array('iteration_count_log2' => 8, 'portable_hashes' => FALSE));
    return $this->passwordhash->HashPassword($password);
    }

    public function editCode($email, $code) {
        $this->db->where('email', $this->request->post['email']);
        $this->db->set('code', $code);
        $this->db->update($this->db->dbprefix . 'user');
    }

    public function deleteUser($user_id) {
    $this->db->where('user_id', $user_id);
    $this->db->delete($this->db->dbprefix . 'user');
    }

    public function getUser($user_id) {
    $query = $this->db->query("SELECT *, (SELECT ug.name FROM `" . $this->db->dbprefix . "user_group` ug WHERE ug.user_group_id = u.user_group_id) AS user_group FROM `" . $this->db->dbprefix . "user` u WHERE u.user_id = '" . (int)$user_id . "'");
    return $query->row_array();
    }

    public function getUserByUsername($username) {
    $query = $this->db->query("SELECT * FROM `" . $this->db->dbprefix . "user` WHERE username = ". $this->db->escape($username) ." ");
    return $query->row();
    }

    public function getUserByCode($code) {
        $query = $this->db->query("SELECT * FROM `" . $this->db->dbprefix . "user` 
        WHERE code = " . $this->db->escape($code) . " AND code != ''");

        return $query->row_array();
    }

  public function getUsers() {
    $this->db->select('*');
    $this->db->from($this->db->dbprefix . 'user');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
      return $query->result_array();
      return true;
    } else {
      return false;
    }
  }

    public function getTotalUsers() {
    return $this->db->count_all('user');
  }

  public function getTotalUsersByGroupId($user_group_id) {
    $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . $this->db->dbprefix . "user` WHERE user_group_id = '" . (int)$user_group_id . "'");
    return $query->row_array('total');
  }

  public function getTotalUsersByEmail($email) {
    $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . $this->db->dbprefix . "user` WHERE LCASE(email) = " . $this->db->escape($email) . " ");

        return $query->row_array('total');
  }


}

Controller 调节器

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Reset extends MX_Controller {

    public function __construct() {
        parent::__construct();
      if ($this->user->hasPermissionAccess() == TRUE) {
         $this->lang->load('admin/english', 'english');
         $this->lang->load('admin/common/reset', 'english');
         $this->load->library('settings');
         $this->load->library('pagination');
         $this->load->library('request');
         $this->load->library('response');
         $this->load->library('document');
                 $this->load->library('email');
      } else { 
        redirect('admin/error');
      }
    }

    public function index() {
        $this->document->setTitle($this->lang->line('heading_title'));

        $data['heading_title'] = $this->lang->line('heading_title');

        $data['text_password'] = $this->lang->line('text_password');

        $data['entry_password'] = $this->lang->line('entry_password');
        $data['entry_confirm'] = $this->lang->line('entry_confirm');

        $data['button_save'] = $this->lang->line('button_save');
        $data['button_cancel'] = $this->lang->line('button_cancel');

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => '<i class="fa fa-home"></i>' .' '.  $this->lang->line('text_home'),
            'href' => site_url('common/dashboard')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->lang->line('heading_title'),
            'href' => site_url('common/forgotten')
        );

        if (isset($this->request->post['password'])) {
            $data['password'] = $this->request->post['password'];
        } else {
            $data['password'] = '';
        }

        $data['action'] = site_url('admin/reset') .'/'. $this->uri->segment(3);

        $data['cancel'] = site_url('admin/login');

        $this->load->library('form_validation');

        $this->form_validation->set_rules('password', 'Password','required|trim|xss_clean|matches[confirm_password]|min_length[3]|max_length[25]');
        $this->form_validation->set_rules('confirm_password', 'Password Confirmation', 'required|trim');

        if ($this->form_validation->run() == FALSE) {

            return $this->load->view('common/reset', $data);

        } else {

            $this->load->model('admin/user/users_model');

            $code = $this->uri->segment(3);

            $user_info = $this->users_model->getUserByCode($code);

            if($user_info) {
                $this->load->model('admin/user/users_model');
                $this->users_model->editPassword($user_info['user_id'], $this->request->post['password']);
                $this->session->set_flashdata('success', 'You have now updated your Password!');
                redirect('admin');
                return true;
            } else {
                $this->session->set_flashdata('error', 'Unable to submit changes. Please try again!');
                redirect('admin');
                return false;
            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM