Php 对Codeigniter登录进行筛选
我的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
用户名
不是管理员
则返回登录页面
以下是我的模型脚本:
//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函数。是的,在视图文件中。看样子