Php 对Codeigniter登录进行筛选

Php 对Codeigniter登录进行筛选,php,mysql,codeigniter,login,Php,Mysql,Codeigniter,Login,我的CodeIgniter项目中有一个登录系统。但是,我想做一些条件过滤,如下所示: 如果用户名不是管理员则返回登录页面 以下是我的模型脚本: //Get Data Login public function getAllData($table) { return $this->db->get($table)->result(); } function login($username, $password) { //create query to conn

我的CodeIgniter项目中有一个登录系统。但是,我想做一些条件过滤,如下所示:

如果
用户名
不是
管理员
则返回登录页面

以下是我的模型脚本:

  //Get Data Login
public function getAllData($table)
{
    return $this->db->get($table)->result();
}

function login($username, $password) {
    //create query to connect user login database
    $this->db->select('*');
    $this->db->from('artist');
    $this->db->where('username', $username);
    $this->db->where('password', MD5($password));
    $this->db->limit(1);

    //get query and processing
    $query = $this->db->get();
    if($query->num_rows() == 1) {
        return $query->result(); //if data is true
    } else {
        return false; //if data is wrong
    }
}
在我拥有的每个控制器上:

    function __construct(){
    parent::__construct();
    $this->load->model('m_admin_data');
    $this->load->helper(array('url'));


    //CEK LOGIN
    if($this->session->userdata('login_status') != TRUE ){
        $this->session->set_flashdata('notif','Login Gagal!! Username atau Password Salah !');
        redirect('Admin_login');
    };
     $this->load->model('m_admin_data');

    // END CEK LOGIN
}
谁能帮我做这个? 只有
用户名
==
管理员
才能访问此页面

对于查看文件,请执行以下操作:


我认为在hook上定义这些条件会更好。使用
pre_控制器
hooks。这样,就不必在每个控制器上声明条件

如果钩子上的条件不满足,那么您只需要重定向到登录页面。在
pre_controller
钩子中,跳过登录页面上的登录条件检查


您可以在
应用程序/core
中创建
MY\u Controller.php
,并让您希望应用此逻辑的控制器扩展
MY\u Controller
,而不是
CI\u Controller

示例
MY_控制器

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('auth_model', 'auth');
        if (!$this->auth->is_logged()) {
            redirect('login');
        }
        if (!$this->auth->is_admin()) {
            redirect('login');
        }
    }

}
您应该不要使用
MY_Controller
作为登录控制器,否则您将陷入无限重定向循环;因此,这实际上只适用于受保护的页面。您还可以将其称为其他名称,甚至可以使用不同的核心控制器

尽管如此,我不知道为什么你要允许非管理员登录,如果你要做的只是将他们重定向到登录页面



同样
md5()
不是一种安全的密码散列方式。甚至php也这么说。

请在函数中再添加一条where语句,见下文

function do_validate() {
    $this->form_validation->set_rules('username', 'Username', 'callback_username_check');
    $this->form_validation->set_rules('password', 'Password', 'required');
    if ($this->form_validation->run() == FALSE)
    {
        # not allowed, display error message
        $this->load->view('myform');
    }
    else
    {   
        # success
        $this->load->view('formsuccess');
        if(login($username, $password)) {
            # redirect page after login
        } else {
            # show error message
        }
    }
}

public function username_check($str){
    if ($str != 'admin'){
        $this->form_validation->set_message('username_check', 'Only admin login allowed');
        return FALSE;
    } else {
        return TRUE;
    }
}

function login($username, $password) {
    //create query to connect user login database
    $this->db->select('*');
    $this->db->from('artist');
    $this->db->where('username', $username);
    $this->db->where('password', MD5($password));
    $this->db->limit(1);

    //get query and processing
    $query = $this->db->get();
    if($query->num_rows() == 1) {
        return $query->result(); //if data is true
    } else {
        return false; //if data is wrong
    }
}

如果在模型中我设置了这样的条件,如果($query->num_rows()==1和$username=“admin”)可以在该部分中pu和吗?相同的区别,与其坚持检查username是否为admin,为什么不只是检查用户是否登录,然后在某个只允许admin的控制器上,检查登录用户当前是否为管理员。也许将逻辑案例分解为更小的部分可以帮助您查看数据流。但提供完整的脚本是毫无疑问的。我认为您可以参考本文,通过在钩子上分配会话来尝试玩游戏。我已经一年多没有使用CI了。但是他们的脚本流程非常简单。关于钩子上的身份验证登录的一些问题,仅供参考。您在何处以及如何发布登录表单数据?Hello@RiandyEka请检查更新的答案。您可以不使用登录函数,但为了更好地理解,我使用了您的函数。提交表单时,您需要调用do_validate()。是的,您可以在视图文件中编辑表单操作,并在表单操作中调用do_validate函数。试试看,它会对你有用的!!这太简单了,亲爱的,我已经在上面的评论中提到了。您必须在表单操作中调用do_validate函数。是的,在视图文件中。看样子