Changes

m
Line 47: Line 47:  
Le #1# représente le chargement de tout un tas de librairie que nous utiliserons par la suite, ainsi que l'initialisation du contexte d'exécution du code PHP (langue, configuration, utilisateur vierge).
 
Le #1# représente le chargement de tout un tas de librairie que nous utiliserons par la suite, ainsi que l'initialisation du contexte d'exécution du code PHP (langue, configuration, utilisateur vierge).
   −
Le #2# représente l'exécution de code propre à l'authentification: La verification que l'on ait dans une session loguée et si ce n'est pas le cas l'affichage de l'écran de login. C'est la que l'objet utilisateur est initialisé:
+
Le #2# represente le code d'authentification: Le programm vérifie si on est dans une session logguée (cela signifie que $_SESSION["dol_login"] existe). Si non, on vérifie si on a reçu des données issu du formulaire de login/mote passe. Au premier appel, ce n'est pas le cas puisque nous n'avons pas encore eu le formulaire à l'écran. Donc on continue et $login est faut, aussi on affiche alors le formulaire HTML et le script se termine.
   −
L'exécution du login, elle, se présente comme suit:
+
Après la soumission du login, la même page (donc index.php) est appelée, nous allons toujours dans le #1#, puis #2# et cette fois $_POST["username"] est défini. Aussi nous vérifions si le user et mot de passe sont ok (la vérifivation est faite dans la base, en LDAP ou autre, cela dépend de la variable $dolibarr_main_authentication du fichier de configuration). Si le couple login/pass est ok, la variable $login est définie, aussi nous n'affichons pas à nouveau le formulaire mais nous conitnuons et positionnons $_SESSION["dol_login"], ainsi au prochain appel d'une page, nous ne rentrons plus dans le "if (! isset($_SESSION["dol_login"]))".
<source lang="php">
  −
$authmode=array('http','dolibarr');
  −
if (isset($dolibarr_auto_user)) $authmode=array('auto');
  −
// Si la demande du login a déjà eu lieu, on le récupère depuis la session
  −
// sinon appel du module qui réalise sa demande.
  −
// A l'issu de cette phase, la variable $login sera définie.
  −
$login='';
  −
if (! session_id() || ! isset($_SESSION["dol_user"]))
  −
{
  −
    # Procédure de login. Affiche page login #
  −
}
  −
else
  −
{
  −
    // On est déjà en session
  −
    $login=$_SESSION["dol_user"];
  −
}
  −
// Charge l'objet user depuis son login
  −
$result=$user->fetch($login);
  −
if ($result <= 0)
  −
{
  −
    dolibarr_print_error($db,$langs->trans("ErrorCantLoadUserFromDolibarrDatabase"));
  −
    exit;
  −
}
  −
// Est-ce une nouvelle session
  −
if (! isset($_SESSION["dol_user"]))
  −
{
  −
    // Nouvelle session pour ce login
  −
    dolibarr_syslog("New session in DOLSESSID_".$dolibarr_main_db_name.": ".session_id());
  −
    $user->update_last_login_date();
  −
    $_SESSION["dol_user"]=$user;
  −
}
  −
</source>
  −
 
  −
Mais analysons plus en détail le code d'appel de la méthode de vérification du couple user/password (il y a plusieurs méthodes disponibles, donc plusieurs appels possibles et qui devraient être mutuellement exclusifs).
  −
 
  −
<source lang="php">
  −
    session_name("DOLSESSID_".$dolibarr_main_db_name);
  −
    session_start();
  −
    // Si on rentre ici suite a soumission d'un couple user/password alors
  −
    // Selon la valeur dolibarr_main_authentication, on appelle la fonction
  −
    // dans le bon fichier qui verifie si un couple user/mot de passe est correcte
  −
    // Sinon, on affiche la page de login
  −
</source>
      
== Les modules de login ==
 
== Les modules de login ==