2011-03-18 119 views
0

我已经安装了离子认证,一切都已启动并正常工作。我唯一的问题是我想改变登录使用访问者的用户名,而不是电子邮件。我改变了ion_auth.php配置文件中的CONFIG选项,它仍然不起作用。是否有额外的步骤我错过了?无法在Codeigniter Ion Auth中将Identity更改为'用户名'?

ion_auth配置

/** 
* A database column which is used to 
* login with. 
**/ 
$config['identity']   = 'username'; 

登录()控制器

//log the user in 
function login() 
{ 
    $this->data['title'] = "Login"; 

    //validate form input 
    $this->form_validation->set_rules('email', 'E-mail Address', 'required|valid_email'); 
    $this->form_validation->set_rules('password', 'Password', 'required'); 

    if ($this->form_validation->run() == true) 
    { //check to see if the user is logging in 
     //check for "remember me" 
     $remember = (bool) $this->input->post('remember'); 

     if ($this->ion_auth->login($this->input->post('email'), $this->input->post('password'), $remember)) 
     { //if the login is successful 
      //redirect them back to the home page 
      $this->session->set_flashdata('message', $this->ion_auth->messages()); 
      redirect($this->config->item('base_url'), 'refresh'); 
     } 
     else 
     { //if the login was un-successful 
      //redirect them back to the login page 
      $this->session->set_flashdata('message', $this->ion_auth->errors()); 
      redirect('auth/login', 'refresh'); //use redirects instead of loading views for compatibility with MY_Controller libraries 
     } 
    } 
    else 
    { //the user is not logging in so display the login page 
     //set the flash data error message if there is one 
     $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); 

     $this->data['email'] = array('name' => 'email', 
      'id' => 'email', 
      'type' => 'text', 
      'value' => $this->form_validation->set_value('email'), 
     ); 
     $this->data['password'] = array('name' => 'password', 
      'id' => 'password', 
      'type' => 'password', 
     ); 

     $this->load->view('auth/login', $this->data); 
    } 
} 

登录()模型

public function login($identity, $password, $remember=FALSE) 
{ 
    if (empty($identity) || empty($password) || !$this->identity_check($identity)) 
    { 
    return FALSE; 
    } 

    $query = $this->db->select($this->identity_column.', id, password, group_id') 
       ->where($this->identity_column, $identity) 
       ->where('active', 1) 
       ->where($this->ion_auth->_extra_where) 
       ->limit(1) 
       ->get($this->tables['users']); 

    $result = $query->row(); 

    if ($query->num_rows() == 1) 
    { 
    $password = $this->hash_password_db($identity, $password); 

    if ($result->password === $password) 
    { 
     $this->update_last_login($result->id); 

     $group_row = $this->db->select('name')->where('id', $result->group_id)->get($this->tables['groups'])->row(); 

     $session_data = array(
       $this->identity_column => $result->{$this->identity_column}, 
       'id'     => $result->id, //kept for backwards compatibility 
       'user_id'    => $result->id, //everyone likes to overwrite id so we'll use user_id 
       'group_id'    => $result->group_id, 
       'group'    => $group_row->name 
       ); 

     $this->session->set_userdata($session_data); 

     if ($remember && $this->config->item('remember_users', 'ion_auth')) 
     { 
     $this->remember_user($result->id); 
     } 

     return TRUE; 
    } 
    } 

    return FALSE; 
} 
+0

已经将其与电子邮件的工作添加一个索引?张贴选项的代码,张贴您使用的代码。 – jondavidjohn 2011-03-18 18:03:08

+0

是的,它可以处理电子邮件。这是默认安装,默认管理员行通过mysql添加。我也创建了几个虚拟账户。我所做的只是将其更改为“用户名”,并尝试登录到/ auth/login的默认登录屏幕。只是给我一个登录错误。我改变的唯一的东西是配置标识选项。我应该根据这种变化创建我自己的登录控制器吗? – jkphl 2011-03-21 20:12:59

+0

再次发布您的代码。 – jondavidjohn 2011-03-21 20:21:04

回答

1

你为什么仍然在控制器处理电子邮件(而不是用户名)?

0

您需要更改控制器,因为它仍然从POST中抓取电子邮件并使用它来尝试登录。

0

你应该在用户名栏中的用户表