CodeIgniter框架双表用户单表单登录实现方案咨询
合并管理员与员工登录表单的实现方案
没问题,我帮你梳理下怎么把两个独立的登录流程合并成一个表单。核心思路就是让用户选择登录类型,然后在后端根据类型去对应的数据表验证身份,具体步骤如下:
1. 修改登录视图(login.php)
把原来提交到特定方法的表单,改成提交到一个统一的登录方法,同时添加用户类型选择控件(下拉框或单选按钮都可以):
<?php echo form_open('index.php/Auth/login'); ?> <!-- 添加用户类型选择 --> <div class="form-group"> <label>登录身份</label> <div class="d-flex gap-3"> <div class="form-check"> <input class="form-check-input" type="radio" name="user_type" id="admin" value="administrator" checked> <label class="form-check-label" for="admin">管理员</label> </div> <div class="form-check"> <input class="form-check-input" type="radio" name="user_type" id="worker" value="werknemer"> <label class="form-check-label" for="worker">员工</label> </div> </div> </div> <!-- 原有的用户名、密码输入框 --> <div class="form-group"> <i class="fa fa-user"></i> <input type="text" name="username" class="form-control" placeholder="用户名" required> </div> <div class="form-group"> <i class="fa fa-lock"></i> <input type="password" name="password" class="form-control" placeholder="密码" required> </div> <button type="submit" class="btn btn-primary">登录</button> <?php echo form_close(); ?>
2. 编写统一的登录控制器方法
在你的Auth控制器里新增一个login方法,负责处理统一登录逻辑:
public function login() { // 获取表单提交的参数 $user_type = $this->input->post('user_type'); $username = $this->input->post('username'); $password = $this->input->post('password'); // 先验证用户类型是否合法,防止恶意提交 if (!in_array($user_type, ['administrator', 'werknemer'])) { $this->session->set_flashdata('error', '无效的登录身份'); redirect('Auth/login'); return; } // 根据用户类型选择对应的数据表 $target_table = $user_type; // 查询该用户是否存在 $user = $this->db->get_where($target_table, ['username' => $username])->row(); if ($user) { // 验证密码(假设你的密码是用password_hash加密存储的,用password_verify验证) if (password_verify($password, $user->password)) { // 设置会话信息,标记登录状态和用户类型 $session_data = [ 'user_id' => $user->id, 'username' => $user->username, 'user_type' => $user_type, 'logged_in' => TRUE ]; $this->session->set_userdata($session_data); // 根据用户类型跳转到不同的后台页面 $redirect_url = $user_type === 'administrator' ? 'admin/dashboard' : 'werknemer/dashboard'; redirect($redirect_url); } else { $this->session->set_flashdata('error', '密码错误,请重试'); redirect('Auth/login'); } } else { $this->session->set_flashdata('error', '该用户名不存在'); redirect('Auth/login'); } }
3. 补充注意事项
- 确保你的项目已经加载了
session库,可以在config/autoload.php里配置:$autoload['libraries'] = array('session'); - 如果你的密码不是哈希存储的,需要调整密码验证逻辑(但强烈建议用
password_hash加密存储密码) - 原来的
werknemer_login和administrator_login方法可以暂时保留,等新流程测试稳定后再逐步移除
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

