2015-12-24 2 views
2

Я использую ion_auth и мне нужно, чтобы проверить, если пользователь вошел в систему ионной аутентификации обеспечивают функцию $this->ion_auth->logged_in() поэтому я проверка, как это:Проверьте, пользователь регистрируется в течение всего приложения

if (!$this->ion_auth->logged_in()) { 
     redirect('auth/login'); 
} 

Но Я размещаю это по всем функциям Controller. как я могу заставить его проверять везде?

+1

попробовать крючки в ХИ –

+0

Вы можете добавить, что в конструкторе и расширить этот класс. Дополнительная информация здесь: http://stackoverflow.com/questions/5920115/codeigniter-checking-if-user-logged-in-for-multiple-pages – Matheno

ответ

0

Самый простой способ сделать это вызов функции один раз в __construct

public function __construct() 
{ 
    parent::__construct(); 
    if (!$this->ion_auth->logged_in()) { 
     redirect('auth/login'); 
    } //if not logged in redirect, for all sections 
} 

Какой будет заставить его работать на все функции. Вы можете также расширить ядро ​​для того, чтобы работать на всех контроллерах application/core/MY_Login.php

<?php 

class MY_Login extends CI_Output { 

    function check_login(){ 
    if (!$this->ion_auth->logged_in()) { 
     redirect('auth/login'); 
    } //if not logged in redirect, for all sections 
    } 

} 
+0

, вставляя это в свой конструктор контроллеров, не так уж плохо, расширяя ядро в таких способах, как правило, не является отличной идеей, главным образом потому, что вывод просто не нужен. – Glubus

0

Создание основного контроллера, контроллер ядро ​​будет иметь конструктор и там вы будете делать чек. Теперь все ваши контроллеры должны расширять основной контроллер вместо контроллера CI. Она будет выглядит следующим образом:

приложения/контроллеры/your_controller.php

class Your_controller extends MY_Controller{ 
     function __construct(){ 
      parent::__construct(); 
    } 
} 

приложение/ядро ​​/ MY_Controller.php

class MY_Controller extends CI_Controller{ 
     function __construct(){ 
      parent::__construct(); 
      if (!$this->ion_auth->logged_in()) { 
       redirect('auth/login'); 
      } 
    } 
} 

Делать это с каждым контроллером будет работать эта функция каждый раз, когда кто-то посещает любую страницу, поэтому обязательно измените ее, чтобы она работала определенно в области, в которой вы хотите это сделать. EG: Сейчас он будет перенаправлять вас, если вы тоже на странице входа. Либо страница входа в систему не расширяет основной контроллер (не рекомендуется), либо добавляет другой оператор if() вокруг функции.

1

Хотя вы могли бы создать свой собственный контроллер, как MY_Controller, который происходит от CI_Controller, на самом деле это не то, для чего оно предназначено.

CodeIgniter поддерживает что-то называемое крючками, которые являются скриптами, которые запускаются в определенные моменты, подобно событиям. Существует крючок, который вызывается каждый раз, когда вызывается любой контроллер, без необходимости реализовывать что-либо в самом контроллере.

Подробнее here

+0

Это ответ, который я хочу услышать. –

Смежные вопросы