認證

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。