714
edits
m (→过程) Tag: 2017 source edit |
No edit summary |
||
| Line 16: | Line 16: | ||
= | =简介= | ||
Dolibarr的身份验证系统变得相当复杂,如果不熟悉身份验证流程,就很难找到bug。本页介绍了认证流程的一部分,允许您遵循流程并在需要时进行干预。您必须熟悉 PHP sessions 才能正确理解发生的事情。 | |||
= | =流程= | ||
该过程从调用您要查看的页面开始。例如,htdocs/index.php 主页。但不是该文件提供身份验证请求。事实上,Dolibarr中的每个页面都包含一个 main.inc.php 文件,该文件本身包含 master.inc.php 文件。因此,我们有: | |||
{{Template:CodeSampleForLoginProcess}} | {{Template:CodeSampleForLoginProcess}} | ||
''#1#'' 表示加载一大堆我们稍后将使用的库,并初始化PHP代码的执行上下文(加载配置文件、加载语言文件并创建一个尚未经过身份验证的空用户)。 | |||
''#2#'' 表示身份验证代码:程序检查您是否处于已登录会话中(这意味着 $_SESSION["dol_login"] 存在)。如果不是,则检查是否从登录名/密码表单接收到传递的数据。在第一次调用时,情况并非如此,因为我们还没有在屏幕上显示表单。因此,我们使用 if 判断,如果 $login 为 false,则显示登录的HTML表单,脚本结束。 | |||
提交登录名和密码后,调用同一个页面(仍是 index.php),我们还是先进入#1#,然后进入#2#,这次设置了$_POST["username"]。此外,我们还检查用户名和密码是否正确(检查是在数据库、LDAP或其他地方进行的,这取决于配置文件中的 $dolibarr_main_authentication 变量值)。如果 login/pass 对正确,则设置 $login 变量,因此我们不会再次显示表单,而是继续并设置 $_SESSION["dol_login"],以便在下一次调用页面时,我们不再进入“if (! isset($_SESSION["dol_login"]))”。 | |||
''#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。 | ||
edits