Difference between revisions of "认证"

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
m (Import interlang links (links to translated versions of this page in other languages) from origin English page "Authentication".)
Tag: 2017 source edit
Line 25: Line 25:
  
 
所以我们有:
 
所以我们有:
<source lang="php">
+
 
<mypage.php>
+
{{Template:CodeSampleForLoginProcess}}
    <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>
 
</source>
 
  
 
   #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。