У меня есть система входа в мой проект CodeIgniter. Но я хочу сделать такую фильтрацию условий:
Если username не admin, вернитесь на страницу входа в систему.
Вот мой сценарий модели:
//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
}
Может ли кто-нибудь помочь мне в этом?
только username == admin может получить доступ к этой странице
и это для файлов просмотра:
<form class = "form-signin form-horizontal m-t-20" action = "<?= site_url('Admin_login/cek_login')?>" method = "post">
<!-- NOTIF -->
<?php
$message = $this->session->flashdata('notif');
if ($message){
echo '<p class = "alert alert-success text-center">'.$message .'</p>';
}?>
<div class = "form-group ">
<div class = "col-xs-12">
<input type = "text" class = "form-control" placeholder = "Username" name = "username" required = "">
</div>
</div>
<div class = "form-group">
<div class = "col-xs-12">
<input type = "password" class = "form-control" placeholder = "Password" name = "password" required = "">
</div>
</div>
<div class = "form-group text-center m-t-30">
<div class = "col-xs-12">
<button class = "btn btn-custom btn-bordred btn-block waves-effect waves-light" type = "submit">Sign in</button>
</div>
</div>
<div class = "form-group m-t-30 m-b-0">
</div>
</form>





Думаю, вам будет удобнее определять эти условия на крючках. Используйте хуки pre_controller. Тогда вам не нужно будет объявлять условие для каждого контроллера.
Если условие на хуках не выполняется, вам просто нужно перенаправить на страницу входа. В хуках pre_controller пропустите проверку условия входа на страницу входа.
что, если в модели я создаю такое условие if ($ query-> num_rows () == 1 и $ username = "admin"), можно ли выполнить И в этом разделе?
Такая же разница, вместо того, чтобы продолжать проверять, является ли имя пользователя admin, почему бы просто не проверить, является ли пользователь вошел в систему, а затем на каком-то контроллере, который разрешает только admin, проверить, является ли зарегистрированный пользователь в настоящее время и admin. Возможно, разбиение логического случая на более мелкие биты поможет вам увидеть поток данных.
Пока о предоставлении полноценного сценария речи быть не может. Я думаю, вы могли бы использовать ссылку на эту статью code.tutsplus.com/tutorials/… Попробуйте поиграться, назначив сеанс на хуках. Я не использую CI больше года. Но их сценарий довольно прост. Некоторый вопрос о входе в систему аутентификации на хуках задавался здесь раньше, fyi.
Вы можете создать MY_Controller.php в application/core, и ваши контроллеры, где вы хотите, чтобы эта логика применялась, расширяли MY_Controller, а не CI_Controller.
Пример MY_Controller:
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
}
}
Извините, не могли бы вы объяснить больше об этом коде, все еще частично не понимаю пункт Where, я хочу фильтровать, поэтому только люди с именем пользователя "admin" могут вводить
Привет @RiandyEka Пожалуйста, проверьте обновленный ответ. Вы можете сделать это без вашей функции входа в систему, но я сделал это с вашей функцией для лучшего понимания
Вам нужно вызвать do_validate (), когда ваша форма будет отправлена.
Можете ли вы еще раз проверить мою тему, я редактировал и добавлял свои файлы просмотра с именем "v_admin_login.php"
Да, вы можете редактировать действие формы в файле представления и вызывать функцию do_validate в действии формы. Попробуйте, у вас сработает !!
и как вызвать do_validate. Я имею в виду, каким будет правильный синтаксис структуры?
Это слишком просто, дорогая, я уже упоминал об этом в комментарии выше. Вы должны вызвать функцию do_validate в действии формы.
так что я вызываю do_validate в файле "просмотра", верно? или файл ионного контроллера?
Да, в файле просмотра. см. как <form class = "form-signin form-horizontal m-t-20" action = "<? = site_url ('{controller_name} / do_validate')?>" method = "post">
да, но у меня уже есть функция cek_login (), которую вы видите?
Да, дорогая, но что-то вы должны изменить в своем коде, если не нужно менять имя функции, тогда посмотрите мой код и поместите его только в свою функцию.
где и как вы публикуете данные формы входа?