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');
}
}
Merci pour ça. J'ai décidé d'essayer DX_Auth. Cela semble très complet et facile à utiliser. – Camsoft