Quando si _construct
il controller, è possibile trovare se sono connessi o meno dal get-go. Se non lo sono, inviarli alla schermata di login:
function __construct() {
parent::__construct();
if (!$this->session->userdata('logged_in')) {
redirect('YourLoginController');
}
}
Questo dovrebbe essere nel controller.
È anche possibile creare un controller di base per estendere il normale CI_Controller
, cercare il concetto MY_Controller
nei documenti. Lì, si potrebbe aggiungere un metodo che controlla per l'autenticazione e reindirizza in caso contrario, e quindi chiamare in vostri metodi del controller che richiedono l'autenticazione:
class MY_Controller extends Controller{
public $data = array();
function _construct() {
parent::_construct();
$data['logged_in'] = $this->session->userdata('logged_in');
}
function authenticated() {
if (!$this->data['logged_in']) {
redirect('YourLoginController');
}
}
}
E poi nel controller:
class Some_Controller extends MY_Controller {
function _construct() {
parent::_construct();
}
// If a method requires authentication
function someMethod() {
$this->authenticated(); //This does nothing if logged in
//It redirects to login if not logged in
//Your stuff.
}
//If a method DOESN'T require login, your $this->data to
//pass to the view has already been started from MY_Controller
//so append the display content you need to that array and
//then pass it to the view
function someOtherMethod() {
$this->data['somecontent'] = "I'm content";
$this->load->view('someView',$this->data);
}
}
Utilizzando un concetto creato dallo someOtherMethod()
è quindi possibile utilizzare la variabile $logged_in
nella visualizzazione per modificare il contenuto in base allo stato di autenticazione di un utente.