Difference between revisions of "认证"
Jump to navigation
Jump to search
PolyglotBot (talk | contribs) m (Import interlang links (links to translated versions of this page in other languages) from origin English page "Authentication".) |
m (→过程) Tag: 2017 source edit |
||
Line 25: | Line 25: | ||
所以我们有: | 所以我们有: | ||
− | + | ||
− | + | {{Template:CodeSampleForLoginProcess}} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
#1#表示我们稍后将使用的许多库的加载,但也初始化包含正在运行的PHP上下文的对象和变量(加载配置文件、加载语言文件以及创建尚未经过身份验证的空用户)。 | #1#表示我们稍后将使用的许多库的加载,但也初始化包含正在运行的PHP上下文的对象和变量(加载配置文件、加载语言文件以及创建尚未经过身份验证的空用户)。 |
Revision as of 08:40, 17 January 2023
介绍
本页描述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。