Функция сброса пароля в php codeigniter - PullRequest
5 голосов
/ 28 сентября 2011

Я пытаюсь написать функцию сброса пароля в php codeigniter php, и не обращайте внимания на то, с чего начать и какой лучший способ сделать это, пожалуйста, помогите

my db as like this
CREATE TABLE `members` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(255) NOT NULL,
 `email` varchar(255) NOT NULL,
 `password` varchar(255) NOT NULL,
 `verifystring` varchar(15) NOT NULL,
 `lostkey` varchar(100) NOT NULL,
 `active` enum('0','1') NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

и функция работает следующим образом

// забыли пароль

 public function forget_password(){

    $this->form_validation->set_rules('email','Email Address','xss_clean|required|valid_email|callback_reset_password');
    if($this->form_validation->run() == FALSE){
    $this->load->view('account/forget_password');
    }else{

        //send an email
        $this->load->library('email');
        $this->email->set_newline("\r\n");

            $this->email->from('me@gmail.com', 'Raju');
            $this->email->to('me@gmail.com');
            $this->email->subject('Email my');
            $key = 12334455;
            $message = "Please click this url to change your password ". base_url()."reset_now/".$key ;
            $message .="<br/>Thank you very much";
            $this->email->message($message);

        if($this->email->send())
                {
                    echo 'Please check your email to reset password.';
                }

                else
                {
                    show_error($this->email->print_debugger());
                }
    }

}


//email check for forget password
function reset_password($email){
    $query = $this->db->get_where('members', array('email'=>$email));

    if(!$query->num_rows()>0){
        $this->form_validation->set_message('forget_email_check', 'The %s does not exists in our database');
        return FALSE;
    }else{

        //check database fields
        /*
        $this->db->where('email', $email);
        $this->db->limit(1);
        $Q = $this->db->get('members');
        if($Q->num_rows()>0){
            $data = $Q->result_array();

            echo $data[0]['username'].'<br/>';
            echo $data[0]['password'].'<br/>';
        }

    */

        echo '<br/>'. $email.'<br/>';
    }

    //$query->free_result();
    //return true;
}

1 Ответ

5 голосов
/ 28 сентября 2011

Все просто. Сначала попросите пользователя ввести свое имя пользователя или идентификатор, либо адрес электронной почты, либо их учетные данные. (Не пароль конечно). Теперь с этим значением запросите базу данных и, если значение существует, просто получите соответствующий адрес электронной почты. (Если учетными данными для входа является электронная почта, просто проверьте наличие адреса электронной почты в базе данных). Тогда,

  1. Создать случайную строку
  2. Получите электронную почту пользователя из базы данных и отправьте эту вновь созданную строку на электронный адрес пользователя.
  3. Обновить текущий пароль пользователя в базе данных.
  4. Теперь установите флаг, который в основном предлагает пользователю создать новый пароль, когда пользователь входит в систему с автоматически сгенерированным паролем.
  5. Как только пользователь создаст новый пароль, обновите пароль в базе данных, а также обновите флаг.

С этого момента, когда пользователь входит в систему, ваше приложение не будет предлагать пользователю сбросить пароль пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...