认证

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search



介绍

本页描述Dolibarr认证过程是如何工作的。您必须熟悉PHP sessions才能正确理解发生的事情。

过程

当您调用要查看的页面时,进程开始。例如index.php (htdocs/index.php)。但这不是要求认证的文件。每个Dolibarr PHP页面都包含一个名为main.inc.php的文件,这个文件包含一个名为master.inc.php的文件。

所以我们有:

 <mypage.php>
     <main.inc.php>
       <master.inc.php>
         #1#
       </master.inc.php>
       #2#
       if (! isset($_SESSION["dol_login"]))
       {
         if (isset($_POST["username"]))
         {
           ...
           // if user and pass are ok, we set $login
           $login=
         }
         if (! $login)
         { 
	   // We show login page
	   include_once(DOL_DOCUMENT_ROOT."/lib/security.lib.php");
	   dol_loginfunction($langs,$conf,$mysoc);
	   exit;
         }
         ...
       }
     </main.inc.php>
   #3#
 </mypage.php>
 #1#表示我们稍后将使用的许多库的加载,但也初始化包含正在运行的PHP上下文的对象和变量(加载配置文件、加载语言文件以及创建尚未经过身份验证的空用户)。
 #2#表示用于身份验证的代码:程序检查我们是否在日志会话中(这意味着$_SESSION["dol_login"]存在)。如果没有,我们检查我们是否从登录和密码表单接收数据。在页面的第一次调用期间,由于用户还没有查看登录表单,情况并非如此。因此,我们继续和 $login 的值仍然是false,所以我们输出登录表单,结束脚本。

在提交登录之后,相同的页面(仍然调用index.php),我们仍然进入#1#,然后#2#,现在定义了$_POST["username"]。因此,我们检查用户和密码是否正常(检查数据库,LDAP,它取决于配置文件中的$dolibarr_main_authentication的值)。如果可以,则设置了$login变量,因此不再显示表单,并且设置$_SESSION["dol_login"],因此下次调用页面时,我们永远不会进入"if (! isset($_SESSION["dol_login"]))"。

 #3#是检查业务权限并显示页面。请参阅Permissions页以获取更多信息。

登录模块

登录模块是包含检查用户/密码有效性的函数的文件。

一个文件按模块,一个文件按函数。每个文件都进行不同类型的检查。

  • 文件htdocs/core/login/functions_http.php使用HTTP基本身份验证检查用户/密码的有效性。
  • 文件htdocs/core/login/functions_ldap.php 使用LDAP检查用户/密码的有效性。
  • 文件htdocs/core/login/functions_dolibarr.php使用Dolibarr数据库中数据检查用户/密码的有效性。

每个文件只包含一个名为check_user_password_xxx的函数(xxx为http/ldap/dolobarr),但Dolibarr只使用其中的一个。具体使用哪一个文件,xxx的值与配置文件conf/conf.php中的 dolibarr_main_authentication 的值匹配。

Dolibarr将运行文件包含的唯一函数,方法是将它们作为参数,仅发送从post登录表单接收的用户和密码。如果用户/密码有效,函数返回true,否则为false。