discuz X3登录流程分析

简介:

discuz X3登录流程分析

公司最近要将discuz论坛升级至最新版discuz X3。但是公司要用自己的通行证同步登陆。故必须要知道discuzX3的登录流程及原理,才能进行二次开发。

一、涉及到的文件

discuzX3/source/template/default/member/login.htm

discuzX3/member.php

discuzX3/source/module/member/member_logging.php

discuzX3/source/class/class_member.php

discuzX3/source/function/function_member.php

discuzX3/uc_client/client.php

discuzX3/uc_client/control/user.php


二、流程(注意:流程顺序也是按照上面文件依次向下)

1、前台输入账号/email,密码登录,根据login.htm里面的form action=“xxxx”看到将数据提交到member.php中处理。

2、流入member_logging.php

3、流入class_member.php中的on_login()方法进行处理(大约在30行)。大约在87行:

1
$result  = userlogin( $_GET [ 'username' ],  $_GET [ 'password' ],  $_GET [ 'questionid' ],  $_GET [ 'answer' ],  $this ->setting[ 'autoidselect' ] ?  'auto'  $_GET [ 'loginfield' ],  $_G [ 'clientip' ]);

将数据丢入到function_member.php中处理。

4、流入function_member.php中大约第14行userlogin()方法。

大约33行:

1
2
3
4
5
6
7
8
9
10
11
12
13
if ( $isuid  == 3) {
     if (! strcmp (dintval( $username ),  $username ) && getglobal( 'setting/uidlogin' )) {
         $return [ 'ucresult' ] = uc_user_login( $username $password , 1, 1,  $questionid $answer $ip );
     elseif (isemail( $username )) {
         $return [ 'ucresult' ] = uc_user_login( $username $password , 2, 1,  $questionid $answer $ip );
     }
     if ( $return [ 'ucresult' ][0] <= 0 &&  $return [ 'ucresult' ][0] != -3) {
         $return [ 'ucresult' ] = uc_user_login( addslashes ( $username ),  $password , 0, 1,  $questionid $answer $ip );
     }
}
else  {
     $return [ 'ucresult' ] = uc_user_login( addslashes ( $username ),  $password $isuid , 1,  $questionid $answer $ip );
}


5、流入client.php大于304行。

1
2
3
4
5
function  uc_user_login( $username $password $isuid  = 0,  $checkques  = 0,  $questionid  '' $answer  '' ) {
     $isuid  intval ( $isuid );
     $return  = call_user_func(UC_API_FUNC,  'user' 'login' array ( 'username' => $username 'password' => $password 'isuid' => $isuid 'checkques' => $checkques 'questionid' => $questionid 'answer' => $answer ));
     return  UC_CONNECT ==  'mysql'  $return  : uc_unserialize( $return );
}

6、最后流入user.php大约106行,onlogin()方法做最终的账号密码正确性验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
     function  onlogin() {
         $this ->init_input();
         $isuid  $this ->input( 'isuid' );
         $username  $this ->input( 'username' );
         $password  $this ->input( 'password' );
         $checkques  $this ->input( 'checkques' );
         $questionid  $this ->input( 'questionid' );
         $answer  $this ->input( 'answer' );
         if ( $isuid  == 1) {
             $user  $_ENV [ 'user' ]->get_user_by_uid( $username );
         elseif ( $isuid  == 2) {
             $user  $_ENV [ 'user' ]->get_user_by_email( $username );
         else  {
             $user  $_ENV [ 'user' ]->get_user_by_username( $username ); //从数据库中获取用户数据
         }
//showmessage($user['password']);
         $passwordmd5  = preg_match( '/^\w{32}$/' $password ) ?  $password  : md5( $password );
         if ( empty ( $user )) {
             $status  = -1;    //用户不存在,或者被删除
         }
         //elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
             //$status = -2; //密码错
         //}
         //elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
             //$status = -3; //安全提问错
         //}
         else  {
             $status  $user [ 'uid' ];
         }
         $merge  $status  != -1 && ! $isuid  &&  $_ENV [ 'user' ]->check_mergeuser( $username ) ? 1 : 0;
         return  array ( $status $user [ 'username' ],  $password $user [ 'email' ],  $merge );
     }



附:discuz X3用户登录uc_user_login()函数详解






      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1293599,如需转载请自行联系原作者



相关文章
|
6月前
|
存储 前端开发 PHP
构建一个简单的网站,包括用户注册、登录功能
构建一个简单的网站,包括用户注册、登录功能
67 1
|
数据库
Discuz! X3.5 登录不了管理后台的处理方法集合
1. 取消IP认证。由于Discuz!论坛会认证IP,不允许不同IP地址同时登录后台,所以取消IP认证即可。修改方法:在网站根目录,Discuz!配置文件config目录下config_global.php 中找到如下代码:$_config[‘admincp’][‘checkip’] = 1把代码中“1”改成“0”。(修改后允许多IP同时登录后台,所以论坛的安全系数会降低)
571 0
Discuz! X3.5 登录不了管理后台的处理方法集合
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
原生php实现大案例(特色:不登录不能使用功能 注册 登录 文件上传 发帖 列表页 详情页 )提供sql
|
JavaScript
【Discuz】如何实现自动注册登录
【Discuz】如何实现自动注册登录
408 0
【Discuz】如何实现自动注册登录
|
PHP 数据库
【Discuz】原系统进入论坛自动注册并进行登录
【Discuz】原系统进入论坛自动注册并进行登录
277 0
【Discuz】原系统进入论坛自动注册并进行登录
|
安全 前端开发 Linux
Discuz3.4漏洞详情分析
Discuz!论坛目前最新版本为3.4版本,已经好久没有更新了,我们SINE安全在对其网站安全检测的同时发现一处漏洞,该漏洞可导致论坛的后台文件可以任意的删除,导致网站瘫痪,后台无法登陆。关于该网站漏洞的细节我们来详细的分析看一下:
577 0
Discuz3.4漏洞详情分析
|
Java 数据库 数据安全/隐私保护
登录功能的流程分析 | 学习笔记
快速学习登录功能的流程分析
116 0
|
数据库 数据安全/隐私保护 PHP
如何实现网站的登录功能
如何实现网站的登录功能http://www.bieryun.com/4623.html 我记得我刚刚学习基本PHP的时候,我正在尝试创建一个基本的网站。除了一件事,我还想到了其他一切。我想在我的网站上实现登录功能,我不知道该怎么做。
2576 0