2013-06-04 13 views
1

나는 코드 점화 장치의 로그인 처리기로 탱크 인증을 사용합니다. 암호 기능을 잊어 버렸을 때, 나는 우편으로 http://xx.xx.xx/en//auth/reset_password/2/01b951fd2a02efa2d64f1fe70c2a4e3b 링크를 보내 게된다. 이 링크를 클릭하면 항상 "귀하의 인증 키가 잘못되었거나 만료되었습니다. 이메일을 다시 확인하고 안내를 따르십시오."비밀 번호 분실 tank_auth codeigniter

세그먼트를 올바르게 변경 했으므로 세그먼트를 변경했지만 어쨌든 if ($this->form_validation->run())에 잘못되었습니다. 그것은 어떻게 든 new_passwordconfirm_new_password을 게시물 데이터로 원하지만 이메일 링크에서 게시물 데이터는 보내지 않을 것입니다.

이이 탱크 인증의 버그인가하는 quickfix (단계를 잊지 tank_auth 수행은 잘 구성되어 있지 뭔가?)가

참조 코드 :

function reset_password() 
{ 
    $break =$this->uri->total_segments(); 
    $new_pass_key= $this->uri->segment($break); 
    $user_id= $this->uri->segment($break-1); 

    $this->form_validation->set_rules('new_password', 'New Password', 'trim|required|xss_clean|min_length['.$this->config->item('password_min_length', 'tank_auth').']|max_length['.$this->config->item('password_max_length', 'tank_auth').']|alpha_dash'); 
    $this->form_validation->set_rules('confirm_new_password', 'Confirm new Password', 'trim|required|xss_clean|matches[new_password]'); 
    $data['errors'] = array(); 

    if ($this->form_validation->run()) { //breaks here. For some reason wants to validate post data which 
     if (!is_null($data = $this->tank_auth->reset_password($user_id, $new_pass_key,$this->form_validation->set_value('new_password')))) { // success 

      $data['site_name'] = $this->config->item('website_name', 'tank_auth'); 

      // Send email with new password 
      $this->_send_email('reset_password', $data['email'], $data); 

      $this->_show_message($this->lang->line('auth_message_new_password_activated').' '.anchor('/auth/login/', 'Login')); 

     } else {              // fail 
      $this->_show_message($this->lang->line('auth_message_new_password_failed')); 
     } 
    } else { 
     // Try to activate user by password key (if not activated yet) 
     if ($this->config->item('email_activation', 'tank_auth')) { 
      $this->tank_auth->activate_user($user_id, $new_pass_key, FALSE); 
     } 

     if (!$this->tank_auth->can_reset_password($user_id, $new_pass_key)) { 
      $this->_show_message($this->lang->line('auth_message_new_password_failed')); 
     } 
    } 
    $this->load->view('auth/reset_password_form', $data); 
} 

답변

2

귀하의 new_pass_key$user_id이 잘못 그렇 겠지.

그것은이와 상자 밖으로 작동합니다 :

$user_id = $this->uri->segment(3); 
$new_pass_key = $this->uri->segment(4); 

편집 :

$user_id = $this->uri->segment(4); 
$new_pass_key = $this->uri->segment(5); 

가 왜 그런데 그 변화 했습니까?

+0

로컬에 URL이 추가되어 기본적으로 URL에'/ en /'이 있습니다. 그래서 마지막 2 세그먼트를 취하도록 코드를 변경했습니다.이 코드는 잘 작동합니다. –

+0

그냥 편집하여 편집하십시오. –

+0

URL에 세그먼트가 더 있으면 정상적으로 작동합니다. –