Publié le : 31/12/2020
Comment vérifier automatiquement qu’un utilisateur peut accéder à une page avec CodeIgniter ?

Dans cet article, nous allons expliquer comment vérifier un utilisateur qui accède à une page donnée soit toujours authentifié et vérifié avec CodeIgniter.
Pour ce faire, nous allons utiliser la puissance de la programmation orienté objet.
Mais avant de parler de ce qu’on va faire, expliquons d’abord ce que CodeIgniter fait par défaut.
Quand un internaute rentre un URL dans son navigateur, le contrôleur principal de CodeIgniter prend la main et va appeler le contrôleur qui est désigné dans l’URL.
Le schéma suivant montre une vue simplifiée de ce qui va être fait.

Pour arriver à notre fonctionnement désiré qui est la vérification automatique des utilisateurs qui accède à une page de CodeIgniter, nous allons hériter CI_Controller pour intégrer le code de vérifications des droits de l’utilisateur qui veut accéder à une page donnée. Si l’utilisateur a le droit d’y accéder, il va aller directement sur la page en question, sinon, il va être redirigé à la page d’authentification.
Ci-dessous un exemple de code qui réalise cette fonctionnalité.
<?php
class MY_Controller extends CI_Controller{
public function __construct(){
parent::__construct();
if (isset($this->session->login) && $this->session->login != "") {
if ($this->router->class == "connexion") {
redirect("welcome");
} elseif ($this->router->class == "deconnexion") {
$this->session->unset_userdata(array("login"));
redirect("connexion");
}
} else {
if ($this->router->class != "connexion") {
redirect("connexion");
} else {
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Login', 'required', array('required' => 'Le login est obligatoire'));
$this->form_validation->set_rules('password', 'Mot de passe', 'required', array('required' => 'Le mot de passe est obligatoire'));
if ($this->form_validation->run() === FALSE) {
} else {
$this->load->library("password");
$this->load->model("users_model");
$this->users_model->setWhere(array(
array("column" => "username", "condition" => "=", "valeur" => $this->input->post("username"))
));
$users = $this->users_model->lire();
if (isset($users) && is_array($users) && count($users) > 0) {
if ($this->password->verify($this->input->post("password"), $users[0]->password)) {
$this->menu = $this->construireMenu();
print_r($this->menu);
$this->session->set_userdata(array(
"login" => $this->input->post("username"),
"menu" => serialize($this->menu)
));
redirect("welcome");
} else {
$this->session->set_flashdata("error_login", "Nom d'utilisateur ou mot de passe incorrect");
}
} else {
$this->session->set_flashdata("error_login", "Nom d'utilisateur ou mot de passe incorrect");
}
}
}
}
}
}