2010-03-06 2 views
1

Je viens de commencer à jouer avec CodeIgniter 1.7.2 et j'ai remarquablement remarqué qu'il n'y a pas de bibliothèque intégrée pour l'authentification de l'utilisateur.Quelqu'un peut-il recommander une bibliothèque d'authentification pour CodeIgniter 1.7.x?

Je n'ai pas besoin de rien de spécial. C'est seulement pour authentifier les utilisateurs dans mon système de back-office. Je n'ai pas besoin d'utilisateurs et de groupes, ni d'autorisations, etc. J'ai juste besoin d'un script pour permettre aux utilisateurs de se connecter. Si un utilisateur tente d'accéder à une page et qu'ils ne sont pas connectés, ils doivent être refusés. Mais il doit être sécurisé et il serait bon qu'il utilise la bibliothèque de validation CI.

Quelqu'un peut-il recommander une bibliothèque pour CI 1.7.2?

J'ai remarqué qu'il existe un post similaire sur StackOverflow mais il est obsolète et la plupart des bibliothèques recommandées ne supportent pas 1.7.2 ou ne sont plus maintenues.

Le plus important est qu'il doit être sécurisé et simple. Eh bien, pas très spécifique à CI est un système de mot de passe/utilisateur .htaccess

Répondre

0

Surtout si vous n'avez que quelques utilisateurs.

Il est simple à installer et est intégré dans tous les serveurs Apache.

2

J'ai tendance à lancer ma propre bibliothèque d'authentification simple.

Tout d'abord, il s'agit de la bibliothèque d'authentification. Il conserve un jeton d'ID utilisateur dans la session. Lors de l'authentification, il vérifie l'existence de ce jeton.

application/bibliothèques/auth.php

class Auth 
{ 
    var $ci; 
    var $user_id; 

    function Auth() 
    { 
     // Get CodeIgniter instance 
     $this->ci = get_instance(); 

     // Fetch token from the session 
     $this->user_id = $this->ci->session->userdata('user_id'); 
    } 

    function check() 
    { 
     return $this->user_id != null; 
    } 

    function login($user_id) 
    { 
     // Set token in the session 
     $this->ci->session->set_userdata('user_id', $user_id); 

     $this->user_id = $user_id; 
    } 

    function logout() 
    { 
     // Remove token from the session 
     $this->ci->session->unset_userdata('user_id'); 

     $this->user_id = null; 
    } 
} 

Je crée mon propre contrôleur de base et il authentifient. Pour plus de commodité, s'il est authentifié, le contrôleur de base charge et stocke l'utilisateur actuel.

demande /bibliothèques/MY_Controller.php

class MY_Controller extends Controller 
{ 
    var $user; 

    function MY_Controller() 
    { 
     parent::Controller(); 
    } 

    function do_auth() 
    { 
     if ($this->auth->check()) 
     { 
      // Authenticated. Fetch current user 
      $this->user = $this->user_model->get_user($this->auth->user_id); 
     } 
     else 
     { 
      // Not authenticated. Redirect to login page 
      redirect('users/login'); 
     } 
    } 
} 

Puis dans toute action que je peux appeler la fonction d'authentification du contrôleur de base.

class Items extends MY_Controller 
{ 
    function Items() 
    { 
     parent::MY_Controller(); 
    } 

    function create() 
    { 
     // Do authentication 
     $this->do_auth(); 

     // Continue with handling request 
    } 
} 

Si je le souhaite, je peux également sécuriser un contrôleur entier.

class Items extends MY_Controller 
{ 
    function Items() 
    { 
     parent::MY_Controller(); 

     // Secure entire controller 
     $this->do_auth(); 
    } 
} 

Je place les actions de connexion et de déconnexion dans un contrôleur d'utilisateur. Dans l'action de connexion, je vérifie les informations d'identification de l'utilisateur et je me connecte à l'utilisateur.

class Users extends MY_Controller 
{ 
    function Users() 
    { 
     parent::MY_Controller(); 
    } 

    function login() 
    { 
     // Verify form input 
     $this->load->library('form_validation'); 
     $this->form_validation->set_rules('username', 'Username', 'required'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 

     if ($this->form_validation->run()) 
     { 
      // Fetch the user based on credentials supplied 
      $user = $this->user_model->get_user_by_credentials($this->input->post('username', true), $this->input->post('password', true)); 

      if ($user != null) 
      { 
       // Credentials verified. Log the user in. 
       $this->auth->login($user->user_id); 
       redirect(''); 
      } 
      else 
      { 
       // Login failed. Show the login page. 
       $this->load->view('users/login', array('login_failed' => true)); 
      } 
     } 
     else 
     { 
      // Yet to authenticate. Show the login page. 
      $this->load->view('users/login', array('login_failed' => false)); 
     } 
    } 

    function logout() 
    { 
     $this->auth->logout(); 
     redirect('users/login'); 
    } 
} 
+0

Pourquoi vous prolongez le contrôleur des choses cela devrait être fait dans la fonction de connexion ou une bibliothèque? –

+0

J'aurais pu faire comme ça.Mais alors la bibliothèque d'authentification aurait dû rediriger vers ma page de connexion spécifique. J'ai considéré cela comme la préoccupation de mon contrôleur d'application. Je pensais que la bibliothèque d'authentification devrait simplement se préoccuper de vérifier l'existence du jeton. –

+0

Oh ok, l'approche que je prends normalement est d'enregistrer la page à laquelle ils ont essayé d'accéder, de les rediriger vers login/register, après une connexion réussie, ils sont redirigés vers la page d'origine. Mais votre solution fonctionne aussi ... ill gardez cela à l'esprit :) –

Questions connexes