認證
介紹
本頁描述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"]))
{
// Set goontestloop to true if we are coming from a post of the login page ($_POST["username"] and $_POST["actionlogin"] is defined.
// We may also set goontestloop to true for some other cases depending on the authentication mode (see next chapter)
$goontestloop = ...
if ($goontestloop)
{
checkLoginPassEntity(username, password, ...);
...
// 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。