Перенаправление на страницу входа - Codeigniter

Я хочу проверить сеанс; если он выходит, он переходит на мой веб-сайт, в противном случае перенаправляется на страницу входа; вот мой контроллер:

function __construct() {
    parent::__construct();
    $this->is_logged_in();
}

public function index($failed=FALSE) {
    $data['main_content'] = 'login_view';
    $data['failed_validation'] = $failed;
    $this->load->view('includes/template', $data);
}

public function is_logged_in() {
    if ($this->session->userdata('f_name') != null) {
        return;
    } else {
        $this->index();
       //die()// This one does not help either
    }
}

public function display_site() {
    $data['main_content'] = 'site_view';
    $this->load->view('includes/template', $data);
}

Это версия после предложения (но все та же проблема!):

Контроллер:

function __construct() {
    parent::__construct();
    $this->load->model('user_model');
    if ($this->user_model->is_logged_in() == FALSE) {
        $this->index();
    }
}

public function index($failed=FALSE) {
    $data['main_content'] = 'login_view';
    $data['failed_validation'] = $failed;
    $this->load->view('includes/template', $data);
}

public function login() {
    $data['main_content'] = 'login_view';
    $data['failed_validation'] = FALSE;
    $this->load->view('includes/template', $data);
}

Модель:

  public function is_logged_in()
    {
         return ($this->session->userdata('is_logged_in') );
    }

Это нормально, но когда пользователь переходит на страницу входа в систему, он показывает как страницу входа, так и главную страницу моего сайта! С другой стороны, даже если я умру (см. комментарий в моем коде), это не поможет, это даст мне пустую страницу!

Спасибо


person user385729    schedule 26.01.2014    source источник
comment
в идеале вы должны возвращать true или false только из is_logged_in, в противном случае это не имеет смысла, в настоящее время он не нормализован и возвращает смешанный код, поэтому ваш код просто неверен, методы в контроллере следует использовать в качестве маршрутизации, поэтому index — это ваш индекс, display_site будет / the_controller/display_site вы должны попытаться перенести свою логику в модель   -  person Lawrence Cherone    schedule 27.01.2014
comment
Я применил ваше предложение (не могли бы вы увидеть мой отредактированный пост); но все та же проблема!   -  person user385729    schedule 27.01.2014


Ответы (2)


Контроллер входа:

class Login extends CI_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
        $this->load->view('includes/login');
    }
}

Главный контроллер:

class Main extends CI_Controller {
    public function __construct() {
        parent::__construct();      
            $this->load->model('user_model');
            if (!$this->user_model->is_logged_in()) {
               redirect(base_url().'login', 'location', 301);
            }   
    }

    public function index() {
        $this->load->view('includes/main');
    }
}
person younis    schedule 27.01.2014
comment
Вы видели мой отредактированный вопрос; Я думаю, это именно то, что я сделал! Не могли бы вы выделить разницу? - person user385729; 27.01.2014
comment
И просто нужно сказать, что этот показывает страницу входа 2 раза; один из конструктора и один из индекса; другими словами, всякий раз, когда я переустанавливал в конструкторе, он не останавливал выполнение, и, поскольку вызывается индекс по умолчанию, он также вызывает индекс! - person user385729; 27.01.2014
comment
вы не перенаправляете на $this-›login(), вместо этого вы перенаправляете на $this-›index().. и в index() вы установили $data['main_content'] = 'login_view', но логически это должно быть 'сайт_просмотр' - person younis; 27.01.2014
comment
ммм; теперь это имеет смысл; моя большая ошибка заключалась в том, что я хотел реализовать как вход в систему, так и другие вещи в одном контроллере! Я предполагаю, что это было бы невозможно, и это также имеет смысл! сейчас попробую твой! - person user385729; 27.01.2014
comment
Большое спасибо Юнис! Это было здорово! У меня простой вопрос! Таким образом, нет возможности иметь логику входа в систему (например, validate_login) и других материалов сайта (например, display_site,...) в одном и том же контроллере? Верно? они должны быть разделены? Верно? - person user385729; 27.01.2014
comment
ну, может быть логика, если вы не проверяете $this-›user_model-›is_logged_in() в конструкторе, а проверяете его в функции индекса, а затем перенаправляете, если оно ложно. Но опять же, это не будет хорошим подходом. Контроллер должен иметь функции, относящиеся только к этому контроллеру. Так что лучше написать отдельные контроллеры для логина и основного. - person younis; 27.01.2014

Вы захотите использовать функцию redirect(), которая является частью url_helper. После того, как вы загрузили его, вы можете просто вызвать redirect("yoururlhere.com"). Поскольку вы можете использовать его часто, вы можете захотеть загружать его автоматически, а не каждый раз загружать библиотеку.

person ed209    schedule 26.01.2014