我在网站上工作,有2个用户可以登录我的网站,两个用户都是我数据库中的不同表:
1. administrator
2. werknemer
对于这两个用户,我有不同的登录表单和登录控制器功能,但我想要的是两个用户只能以1个表单登录。 我只是不知道该怎么做。
这是我的login.php视图文件中的2个视图表单:
<?php echo form_open('index.php/Auth/werknemer_login'); ?>
<div class="form-group">
<input class="form-control" name="naam" id="naam" type="text" placeholder="Naam">
</div>
<div class="form-group">
<input class="form-control" name="wachtwoord" id="wachtwoord" type="password" placeholder="Wachtwoord">
</div>
<a href="" id="wachtwoordvergeten">Wachtwoord vergeten?</a>
<br>
<div>
<button class="btn btn-primary" name="werknemer_login" >Inloggen</button>
<br><br><br><br>
</div>
</form>
</div>
<div class="clearfix"></div>
<!-- ----------------verticale lijn-------------------- -->
<!-- ----------------Administrator inloggen-------------------- -->
<div class="main1" id="administrator_login">
<br>
<h3 class="headerh3">Administrator inloggen</h3>
<?php echo form_open('index.php/Auth/administrator_login'); ?>
<div class="form-group">
<input class="form-control" name="naam" id="naam" type="text" placeholder="Naam">
</div>
<div class="form-group">
<input class="form-control" name="wachtwoord" id="wachtwoord" type="password" placeholder="Wachtwoord">
</div>
<a href="" id="wachtwoordvergeten">Wachtwoord vergeten?</a>
<br>
<div>
<button class="btn btn-primary" name="administrator_login" >Inloggen</button>
<br><br><br><br>
</div>
</form>
这些是我的Auth.php控制器中的登录控制器功能:
public function administrator_login()
{
$this->form_validation->set_rules('naam', 'Naam', 'required');
$this->form_validation->set_rules('wachtwoord', 'Wachtwoord', 'required|min_length[5]');
if ($this->form_validation->run() == TRUE) {
$naam = $_POST['naam'];
$wachtwoord = ($_POST['wachtwoord']);
//check gebruiker in database
$this->db->select('*');
$this->db->from('administrator');
$this->db->where(array('naam'=>$naam));
$query = $this->db->get();
$administrator = $query->row();
//Als gebruiker bestaat
if($administrator->naam)
{
$this->session->set_flashdata("success","U bent nu ingelogd als administrator");
//Als er een user is maak session date
$_SESSION['administrator_level'] = 1;
$_SESSION['administrator_logged'] = TRUE;
$_SESSION['naam'] = $administrator->naam;
$_SESSION['wachtwoord'] = $administrator->wachtwoord;
//link naar werknemer/administrator view pagina
redirect("index.php/Welkomadministrator", "refresh");
}
$this->session->set_flashdata("success","U bent nu ingelogd");
}
else{
$this->session->set_flashdata('error','Verkeerde naam of wachtwoord');
//wanneer er een foutmelding is link weer naar de login pagina
redirect("" , "refresh");
}
//laad de login pagina
// $this->load->view('login');
}
// Login code voor de administrator
public function werknemer_login()
{
$this->form_validation->set_rules('naam', 'Naam', 'required');
$this->form_validation->set_rules('wachtwoord', 'Wachtwoord', 'required|min_length[5]');
if ($this->form_validation->run() == TRUE) {
$naam = $_POST['naam'];
$wachtwoord = ($_POST['wachtwoord']);
//check gebruiker in database
$this->db->select('*');
$this->db->from('werknemer');
$this->db->where(array('naam'=>$naam));
$query = $this->db->get();
$werknemer = $query->row();
//Als gebruiker bestaat
if($werknemer->naam)
{
$this->session->set_flashdata("success","U bent nu ingelogd als werknemer");
//Als er een user is maak session date
$_SESSION['werknemer_level'] = 1;
$_SESSION['werknemer_logged'] = TRUE;
$_SESSION['naam'] = $werknemer->naam;
$_SESSION['wachtwoord'] = $werknemer->wachtwoord;
}
//link naar administrator/werknemer view pagina
redirect("index.php/Welkomwerknemer", "refresh");
$this->session->set_flashdata("success","U bent nu ingelogd");
}
else{
$this->session->set_flashdata('error','Verkeerde naam of wachtwoord');
//wanneer er een foutmelding is link weer naar de login pagina
redirect("" , "refresh");
}
//laad de login pagina
//$this->load->view('login');
}
所以我的问题是有没有办法让2个用户登录1表单?
答案 0 :(得分:0)
是的,有很多方法。您可以在登录表中为角色添加一个额外的列。这减少了你需要的一个额外的桌子。登录后,您可以检查登录用户的角色,然后将其重定向到该页面。这是最优选的一个。
对于具有两个表的一个表单的第二个,如果存在用户详细信息,则首先在管理表中检查用户条目&amp;如果用户详细信息不存在,则将其重定向到管理页面,然后检查其他表,然后重定向到常规用户页面(如果凭据正确)。
假设两个表中都没有用户详细信息,则表示该用户未注册或输入了错误的ID。
答案 1 :(得分:0)
我注意到评论中记录了一些错误。使用以下代码,您可以从同一控制器登录两个用户组,同时保持当前的表结构。我想补充一点,这不会开箱即用 - 您必须使用模型中的hash_password()
来散列您当前存储在数据库中的任何纯文本密码 - 这是为了您的用户安全
注意:as per the docs数据库中的密码字段必须允许输入等于或大于255个字符
建议将结果存储在可以的数据库列中 扩展超过60个字符(255个字符将是一个不错的选择)。
控制器:
class Somecontroller extends CI_Controller {
public function login() {
$this->form_validation->set_rules('naam', 'Naam', 'required');
$this->form_validation->set_rules('wachtwoord', 'Wachtwoord', 'required|min_length[5]');
if ($this->form_validation->run() == false) {
$this->session->set_flashdata('error', validation_errors());
redirect('', 'refresh');
}
$this->load->model('auth_model');
$naam = $this->input->post('naam');
$wachtwoord = $this->input->post('wachtwoord');
if (($admin = $this->auth_model->get_user($naam, 'administrator')) !== false) {
if (!$this->auth_model->verify_password($wachtwoord, $admin->wachtwoord)) {
$this->session->set_flashdata('error', 'Name or password is invalid.');
redirect('', 'refresh');
}
$_SESSION['administrator_level'] = 1;
$_SESSION['administrator_logged'] = TRUE;
$_SESSION['naam'] = $admin->naam;
// Don't store the users password in a session
//$_SESSION['wachtwoord'] = $admin->wachtwoord;
$this->session->set_flashdata("success","U bent nu ingelogd");
redirect('index.php/Welkomadministrator', 'refresh');
} elseif (($user = $this->auth_model->get_user($naam, 'werknemer')) !== false) {
if (!$this->auth_model->verify_password($wachtwoord, $user->wachtwoord)) {
$this->session->set_flashdata('error', 'Name or password is invalid.');
redirect('', 'refresh');
}
$_SESSION['werknemer_level'] = 1;
$_SESSION['werknemer_logged'] = TRUE;
$_SESSION['naam'] = $user->naam;
//$_SESSION['wachtwoord'] = $user->wachtwoord;
$this->session->set_flashdata("success","U bent nu ingelogd");
redirect('index.php/Welkomwerknemer', 'refresh');
} else {
// we couldn't find the user in either table, they must not exist
$this->session->set_flashdata('error', 'User does not exist in the system.');
redirect('', 'refresh');
}
}
}
型号:
class Auth_model extends CI_Model {
/**
* Gets a user from the db
*
* @param mixed $naam
* @param string $table
* @return boolean|obj
*/
public function get_user($naam, $table) {
$query = $this->db->get_where($table, array('naam' => $naam));
if ($query->num_rows() > 1) {
return $query->row();
}
return false;
}
/**
* Verifies password matches the hashed password stored in db
*
* @param string $password user keyed in password
* @param string $db_password password from db
* @return boolean
*/
public function verify_password($password, $db_password) {
return password_verify($password, $db_password);
}
/**
* Hashes a password to be stored in db
*
* @param mixed $password
* @return hashed password
*/
public function hash_password($password) {
return password_hash($password, PASSWORD_DEFAULT);
}
}