如果管理员正在登录。我希望他转到admin / dashboard。否则为用户仪表板。登录控制器如下。在用户表格中,我有一个“#role”列。而价值是' 1'和' 2'。 1代表admin,2代表用户。并且有单独的角色表。
登录用户功能
public function login(){
$data['title'] = 'Login';
//validating form
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if($this->form_validation->run() ===FALSE){
$this->load->view('templates/header');
$this->load->view('users/login', $data);
$this->load->view('templates/footer');
}else{
//Get username
$username = $this->input->post('username');
//Get password in md5
$password= md5($this->input->post('password'));
//Login User.... passing username and password
$user_id = $this->user_model->login($username, $password);
//checking userid
if($user_id){
//creating session if user_id is present
$user_data=array(
'user_id'=>$user_id,
'username'=>$username,
'logged_in' => true
);
$this->session->set_userdata($user_data);
//set message
$this->session->set_flashdata('user_loggedin', 'Login successful');
redirect('posts');
}else{
//creating session if user_id is not present
$this->session->set_flashdata('login_failed', ' Invalid credentials');
redirect('users/login');
}
}
}
答案 0 :(得分:1)
在验证用户时,您必须发送一个数组作为对登录呼叫的响应。
$user_info = $this->user_model->login($username, $password); // User Info should be an Array $user_info = array('user_id' => '123', 'role' => '1'); if exist and $user_info = array(); if not
if(isset($user_info['user_id']) && !empty($user_info['user_id'])) {
$user_data=array(
'user_id'=>$user_info['user_id'],
'username'=>$username,
'logged_in' => true
);
$this->session->set_userdata($user_data);
$this->session->set_flashdata('user_loggedin', 'Login successful');
if($user_info['role'] == 1){
redirect('admin/dashboard');
} else {
redirect('user/dashboard');
}
}
当然这会对你有帮助。
答案 1 :(得分:0)
我不确切知道您为用户角色设置的列名称。说这是 user_role_id ,这是我的例子。
//checking userid
if($user_id){
//creating session if user_id is present
$user_data=array(
'user_id'=>$user_id, // you should change this variable to $user_id['id']
'username'=>$username,
'logged_in' => true
);
$this->session->set_userdata($user_data);
//set message
$this->session->set_flashdata('user_loggedin', 'Login successful');
if($user_id['user_role_id'] == 1){
redirect('admin/dashboard', 'refresh');
}
else if($user_id['user_role_id'] == 2){
redirect('users/dashboard', 'refresh');
}
}else{
//creating session if user_id is not present
$this->session->set_flashdata('login_failed', ' Invalid credentials');
redirect('users/login');
}
答案 2 :(得分:0)
当代 CodeIgniter 的主要开发者 Lonnie Ezell 先生
在 CodeIgniter 论坛上的这篇文章中, https://forum.codeigniter.com/thread-67063-post-339924.html#pid339924
解释CodeIgniter过滤器的使用 http://codeigniter.com/user_guide/incoming/filters.html
请注意并善意地注意他所做的例子
想想谁写的帖子... 您有正确的 CodeIgniter 方法来处理用户和管理员的可访问性分隔
所以让我们通过复制您在文档中找到的骨架在 /App/Filters 中创建您的过滤器@ https://codeigniter.com/user_guide/incoming/filters.html#creating-a-filter
例如将其另存为 /App/Filters/AccessFilter.php
根据您的需要自定义名称,并在 before 方法中填写您的登录检查和重定向操作(如果未登录)
然后转到 /App/Config/Filters.php 中的过滤器配置设置和
为您全新创建的过滤器指定别名
'accessCheck' => \App\Filters\AccessFilter::class
选择最适合您需求的政策,例如Filters.php 配置文件中的底部,并注意它提供的默认 CodeIgniter 安装附带的提示
/* List filter aliases and any before/after uri patterns that they should run on, like: 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']], */
好吧,让我们使用它
public $filters = [
'accessCheck' => ['before' => ['controllerName(/*)?']]
];
其中 controllerName 是您要在用户未登录时拒绝访问的控制器
请注意,您可以拒绝多个控制器作为数组,还要注意正则表达式条件将停止访问控制器的每个方法,包括 index() 一个
所以它会阻止两者
奖励: 另请注意,过滤器可以在自定义路由字符串中设置为参数 https://codeigniter.com/user_guide/incoming/routing.html#applying-filters (这种选择性使用,将允许例如避免已经登录的用户访问登录页面或注册页面以及其他类似的“偏差”)