Blogdevphp

Codeigniter : Gestion utilisateurs

2014-02-15 codeigniter

Nous allons à travers cet article, établir la gestion des utilisateurs sous le framework Codeigniter. L'utilisateur devra se loguer, une vérification de ses identifiants sera effectuée.

Si tout se passe bien, ledit utilisateur aura sa session et lorsqu 'il se déconnectera, elle sera détruite. Vous pouvez améliorer ce code et l'adapter à votre projet. Sans plus tarder, rentrons dans le vif du sujet!

Le formulaire de connexion

Pour se connecter, le formulaire de connexion est le passage obligé, pour s'assurer que l'utilisateur, soit présent dans notre base de données. Concernant, la base de données, on va se limiter à trois champs pour la table user. On aura un champ id_user en auto-increment, un champ email_user et enfin un champ mdp_user.

<div id="login">
    <form class ="form_user form-horizontal" method="post" action="">
        <h4>Connexion espace admin</h4>
        <div class="control-group">
            <label class="control-label" for="email">Email</label>
            <div class="controls">
                <input class="validate[required,custom[email]]" type="text" name="id" placeholder="Email" value="<?php echo set_value('email'); ?>">
                    <?php echo form_error('email'); ?>
            </div>
        </div>

        <div class="control-group">
            <label class="control-label" for="mdp">Mot de passe</label>
            <div class="controls">
                <input class="validate[required]" type="password" id="inputPassword" placeholder="Password" name="mdp">
                    <?php echo form_error('mdp'); ?>
            </div>
        </div>
        
        <button class="btn btn-large btn-primary" type="submit">Valider</button>

    </form>
    <?php
 if ($this->session->flashdata('noconnect'))
 echo "<div class=\"alert alert-error\">
   <button type=\"button\" class=\"close\" data-dismiss=\"alert\">&times;</button>
  <strong>" . $this->session->flashdata('noconnect') . "<strong>
 </div>";
 ?>
</div>

Par rapport, au mot de passe, il est important qu'il ne soit pas 'en clair', dans le cas où, la sécurité de la base de données a été compromise. Ils devront être cryptés, avant d'être enregistrés en base. Cette page vous permet de pouvoir réaliser ce processus, la sécurité des données de vos utilisateurs est primordiale.

Notre formulaire se présente comme ceci :

L'utilisateur doit saisir son email et son mot de passe afin d'accéder à son compte. Comme vous le voyez, des messages d'erreurs s'affichent, si un champ est vide ou la donnée saisie, non conforme, à ce qu'on attend. J'utilise Jquery ValidationEngine, j'en avais parlé dans un article se trouvant, dans la catégorie Jquery. Cependant, il faut aussi ajouter la validation du framework Codeigniter au cas où javascript est désactivé.

Il faut également avertir l'utilisateur quand les renseignements saisies ne correspondent pas à nos données en base. Généralement, il doit saisir son email pour recevoir ou modifier son mot de passe. 

Le modèle de donnée

C'est ici que nous allons saisir toutes nos requêtes afin d'aller chercher les informations. Retenez bien que toutes vos requêtes, doivent être saisies, dans vos classes, dans ce répertoire. C'est le principe du MVC, Modèle-Vue-Contrôleur,ce design pattern vous permet de bien vous organiser et appliquer une logique d'intéraction.

Dans notre classe, User_model, nous avons une méthode userLogin concernant afin de permettre aux utilisateurs l'accès à leur compte, account_user.

<?php

class User_model extends CI_Model
{
    protected $table = 'user';
        
        public function userLogin($email,$mdp) {
            
            return $this->db->select('email_user,mdp_user')
                        ->from($this->table)
                        ->where('email_user', $email)
                        ->where('mdp_user', $mdp)
                        ->get()
                        ->result();
        }
        
}

?>

N'oubliez de déclarer votre classe dans le fichier autoload.php, sous la mention Auto-load Models.

Le Contrôleur

Dans notre contrôleur, on définit les règles de validation pour nos deux champs. En fonction de la bonne marche ou pas du processus de connexion, on redirige l'utilisateur sur une page donnée. Si la connexion n'est pas effectuée, on redirige sur la page de login. Dans le cas contraire, on redirige l'utilisateur vers la page de son compte. On récupére l'id de l'utilisateur pour le mettre en session avec la fonction $this->session->set_userdata().

<?php

class Login extends CI_Controller{
    
    function __construct(){
        parent::__construct();
    }
    
    public function index(){
      

        //Récupérer les données saisies envoyées en POST
        $email = $this->input->post('email');
        $mdp = $this->input->post('mdp');
        
        
        $this->form_validation->set_rules('email', '"Identifiant"', 'trim|required|xss_clean');
        $this->form_validation->set_rules('mdp', '"Mot de passe"', 'trim|required|xss_clean');
        $result = $this->user_model->userLogin($email,$mdp);
        
        if($this->form_validation->run() == false)
        {
            $this->load->view('admin');
        }
        elseif($this->form_validation->run() == true && empty($result))
        {
            $this->session->set_flashdata('noconnect', 'Aucun compte ne correspond à vos identifiants ');
            redirect('/login');
        }
        else
        {
           $this->session->set_userdata('id_user', $result[0]->id_user);
           redirect('user/accueil');          
        }
        
}

?>

Comme on ferait avec la session native de PHP, la session a un nom et une valeur. Comme pour la déclaration du modèle dans le fichier autoload.php, faites de même pour la librairie session sous la mention Auto-load librairies.

Au niveau de la classe user, on a mis en session l'id de l'utilisateur.

<?php

class User extends CI_Controller {
  
  function __construct() {
    parent::__construct();
    $this->sessionUser();
  }

  private function sessionUser() {

    if (!$this->session->userdata('id_user')) {
      redirect('/login');
    }
  }
  
  public function logout() {
    $this->session->sess_destroy();
    redirect('/login');
  }

?>

On indique que si il n'y a pas de session utilisateur, on tombera toujours sur le formulaire de connexion. En ayant la session de l'utilisateur, cela vous permettra, par exemple de pouvoir personnaliser son espace, accéder ou pas à une partie du site. Quand celui-ci quitte le site, sa session est détruite.

Conclusion

Ce système de gestion d'utilisateurs permet, de se faire une idée, sous le framework Codeigniter. Le script est à améliorer, par rapport au mot de passe, à l'envoi du mail en cas d'oubli du mot de passe ou encore les droits des utilisateurs. C'est un bon point de départ pour administrer les comptes de ses utilisateurs.

comments powered by Disqus
Copyright © 2018 blogdevphp.fr - Tous droits réservés