Line 16:
Line 16:
−
= 介绍 =
+
=简介=
−
本页描述Dolibarr认证过程是如何工作的。您必须熟悉PHP sessions才能正确理解发生的事情。
+
Dolibarr的身份验证系统变得相当复杂,如果不熟悉身份验证流程,就很难找到bug。本页介绍了认证流程的一部分,允许您遵循流程并在需要时进行干预。您必须熟悉 PHP sessions 才能正确理解发生的事情。
−
= 过程 =
+
=流程=
−
当您调用要查看的页面时,进程开始。例如index.php (htdocs/index.php)。但这不是要求认证的文件。每个Dolibarr PHP页面都包含一个名为main.inc.php的文件,这个文件包含一个名为master.inc.php的文件。
+
该过程从调用您要查看的页面开始。例如,htdocs/index.php 主页。但不是该文件提供身份验证请求。事实上,Dolibarr中的每个页面都包含一个 main.inc.php 文件,该文件本身包含 master.inc.php 文件。因此,我们有:
−
−
所以我们有:
{{Template:CodeSampleForLoginProcess}}
{{Template:CodeSampleForLoginProcess}}
−
#1#表示我们稍后将使用的许多库的加载,但也初始化包含正在运行的PHP上下文的对象和变量(加载配置文件、加载语言文件以及创建尚未经过身份验证的空用户)。
+
''#1#'' 表示加载一大堆我们稍后将使用的库,并初始化PHP代码的执行上下文(加载配置文件、加载语言文件并创建一个尚未经过身份验证的空用户)。
−
#2#表示用于身份验证的代码:程序检查我们是否在日志会话中(这意味着$_SESSION["dol_login"]存在)。如果没有,我们检查我们是否从登录和密码表单接收数据。在页面的第一次调用期间,由于用户还没有查看登录表单,情况并非如此。因此,我们继续和 $login 的值仍然是false,所以我们输出登录表单,结束脚本。
+
''#2#'' 表示身份验证代码:程序检查您是否处于已登录会话中(这意味着 $_SESSION["dol_login"] 存在)。如果不是,则检查是否从登录名/密码表单接收到传递的数据。在第一次调用时,情况并非如此,因为我们还没有在屏幕上显示表单。因此,我们使用 if 判断,如果 $login 为 false,则显示登录的HTML表单,脚本结束。
−
在提交登录之后,相同的页面(仍然调用index.php),我们仍然进入#1#,然后#2#,现在定义了$_POST["username"]。因此,我们检查用户和密码是否正常(检查数据库,LDAP,它取决于配置文件中的$dolibarr_main_authentication的值)。如果可以,则设置了$login变量,因此不再显示表单,并且设置$_SESSION["dol_login"],因此下次调用页面时,我们永远不会进入"if (! isset($_SESSION["dol_login"]))"。
+
提交登录名和密码后,调用同一个页面(仍是 index.php),我们还是先进入#1#,然后进入#2#,这次设置了$_POST["username"]。此外,我们还检查用户名和密码是否正确(检查是在数据库、LDAP或其他地方进行的,这取决于配置文件中的 $dolibarr_main_authentication 变量值)。如果 login/pass 对正确,则设置 $login 变量,因此我们不会再次显示表单,而是继续并设置 $_SESSION["dol_login"],以便在下一次调用页面时,我们不再进入“if (! isset($_SESSION["dol_login"]))”。
−
#3#是检查业务权限并显示页面。请参阅[[Permissions En|Permissions]]页以获取更多信息。
+
''#3#'' 对应于检查业务权限,如果可以,则显示页面。有关更多信息,请参阅 [[用户权限]] 页面。
−
= 登录模块 =
+
=登录模块=
登录模块是包含检查用户/密码有效性的函数的文件。
登录模块是包含检查用户/密码有效性的函数的文件。
Line 42:
Line 40:
一个文件按模块,一个文件按函数。每个文件都进行不同类型的检查。
一个文件按模块,一个文件按函数。每个文件都进行不同类型的检查。
−
* 文件'''htdocs/core/login/functions_http.php'''使用HTTP基本身份验证检查用户/密码的有效性。
+
*文件'''htdocs/core/login/functions_http.php'''使用HTTP基本身份验证检查用户/密码的有效性。
−
* 文件'''htdocs/core/login/functions_ldap.php''' 使用LDAP检查用户/密码的有效性。
+
*文件'''htdocs/core/login/functions_ldap.php''' 使用LDAP检查用户/密码的有效性。
−
* 文件'''htdocs/core/login/functions_dolibarr.php'''使用Dolibarr数据库中数据检查用户/密码的有效性。
+
*文件'''htdocs/core/login/functions_dolibarr.php'''使用Dolibarr数据库中数据检查用户/密码的有效性。
每个文件只包含一个名为'''check_user_password_xxx'''的函数(xxx为http/ldap/dolobarr),但Dolibarr只使用其中的一个。具体使用哪一个文件,'''xxx'''的值与配置文件'''conf/conf.php'''中的 '''dolibarr_main_authentication''' 的值匹配。
每个文件只包含一个名为'''check_user_password_xxx'''的函数(xxx为http/ldap/dolobarr),但Dolibarr只使用其中的一个。具体使用哪一个文件,'''xxx'''的值与配置文件'''conf/conf.php'''中的 '''dolibarr_main_authentication''' 的值匹配。
Dolibarr将运行文件包含的唯一函数,方法是将它们作为参数,仅发送从post登录表单接收的用户和密码。如果用户/密码有效,函数返回true,否则为false。
Dolibarr将运行文件包含的唯一函数,方法是将它们作为参数,仅发送从post登录表单接收的用户和密码。如果用户/密码有效,函数返回true,否则为false。