Сделайте фильтрацию для входа в Codeigniter

У меня есть система входа в мой проект 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>

где и как вы публикуете данные формы входа?

Pradeep 20.07.2018 06:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
522
3

Ответы 3

Думаю, вам будет удобнее определять эти условия на крючках. Используйте хуки pre_controller. Тогда вам не нужно будет объявлять условие для каждого контроллера.

Если условие на хуках не выполняется, вам просто нужно перенаправить на страницу входа. В хуках pre_controller пропустите проверку условия входа на страницу входа.

Хуки Документы

что, если в модели я создаю такое условие if ($ query-> num_rows () == 1 и $ username = "admin"), можно ли выполнить И в этом разделе?

Riandy Eka 20.07.2018 06:05

Такая же разница, вместо того, чтобы продолжать проверять, является ли имя пользователя admin, почему бы просто не проверить, является ли пользователь вошел в систему, а затем на каком-то контроллере, который разрешает только admin, проверить, является ли зарегистрированный пользователь в настоящее время и admin. Возможно, разбиение логического случая на более мелкие биты поможет вам увидеть поток данных.

Charis 20.07.2018 06:08

Пока о предоставлении полноценного сценария речи быть не может. Я думаю, вы могли бы использовать ссылку на эту статью code.tutsplus.com/tutorials/… Попробуйте поиграться, назначив сеанс на хуках. Я не использую CI больше года. Но их сценарий довольно прост. Некоторый вопрос о входе в систему аутентификации на хуках задавался здесь раньше, fyi.

Charis 24.07.2018 13:32

Вы можете создать 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" могут вводить

Riandy Eka 20.07.2018 08:17

Привет @RiandyEka Пожалуйста, проверьте обновленный ответ. Вы можете сделать это без вашей функции входа в систему, но я сделал это с вашей функцией для лучшего понимания

Kamlesh 20.07.2018 09:15

Вам нужно вызвать do_validate (), когда ваша форма будет отправлена.

Kamlesh 20.07.2018 09:18

Можете ли вы еще раз проверить мою тему, я редактировал и добавлял свои файлы просмотра с именем "v_admin_login.php"

Riandy Eka 20.07.2018 10:25

Да, вы можете редактировать действие формы в файле представления и вызывать функцию do_validate в действии формы. Попробуйте, у вас сработает !!

Kamlesh 20.07.2018 14:47

и как вызвать do_validate. Я имею в виду, каким будет правильный синтаксис структуры?

Riandy Eka 24.07.2018 09:49

Это слишком просто, дорогая, я уже упоминал об этом в комментарии выше. Вы должны вызвать функцию do_validate в действии формы.

Kamlesh 24.07.2018 10:30

так что я вызываю do_validate в файле "просмотра", верно? или файл ионного контроллера?

Riandy Eka 24.07.2018 11:06

Да, в файле просмотра. см. как <form class = "form-signin form-horizontal m-t-20" action = "<? = site_url ('{controller_name} / do_validate')?>" method = "post">

Kamlesh 24.07.2018 11:17

да, но у меня уже есть функция cek_login (), которую вы видите?

Riandy Eka 24.07.2018 11:58

Да, дорогая, но что-то вы должны изменить в своем коде, если не нужно менять имя функции, тогда посмотрите мой код и поместите его только в свою функцию.

Kamlesh 24.07.2018 13:01

Другие вопросы по теме