discuzX3登入流程分析
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,如需轉載請自行聯絡原作者
相關文章
- SSH金鑰登入流程分析
- 第三方賬號登入功能接入全流程分析(轉)
- 逆向實戰33——某東登入引數與流程分析(包含滑塊)
- OpenIddict 登入及詳細流程解析
- BS系統的登入鑑權流程演變
- Picasso 載入圖片的流程分析
- 【網頁登入】QQ 登入、微信登入、微博登入、GitHub 登入網頁Github
- 抖音 App 登入分析,Cookie 獲取APPCookie
- MYSQL 連線登入過程分析MySql
- 微信登入協議分析記錄協議
- 部落格園登入請求分析
- 終端登入被互相踢掉,思路分析
- 系統登入認證流程對比(cookie方式與jwt)CookieJWT
- QQ第三方登入認證流程(乾貨)
- 最強SSO單點登入教程(三)單點登出流程分析
- “登入”功能有哪些測試點?1000個登入頁面問題分析!
- QQ快速登入協議分析以及風險反思協議
- QQ 快速登入協議分析與實現協議
- 登入抓包逆向分析學習筆記筆記
- 新浪微博動態 RSA 分析圖文+登入
- IDEA支付寶小程式開發流程——授權登入Idea
- [API 寫法] QQ 登入、微信登入、Facebook、google、蘋果登入APIGo蘋果
- CAS 單點登入流程
- printk 流程分析
- printk流程分析
- MT4客戶端通訊分析(一)——登入部分分析客戶端
- (十一) 整合spring cloud雲架構 - SSO單點登入之OAuth2.0登入流程(2)SpringCloud架構OAuth
- mysql localhost登入和tcp/ip登入MySqllocalhostTCP
- Linux使用者登入記錄分析指令碼Linux指令碼
- 微信小程式的登入流程微信小程式
- uniapp 完成兩種方式登入 驗證碼登入 密碼登入APP密碼
- sqlplus 可以登入 plsql 不能登入SQL
- spring boot 載入web容器tomcat流程原始碼分析Spring BootWebTomcat原始碼
- Android 9.0 預設輸入法的設定流程分析Android
- JavaScript登入JavaScript
- 登入功能
- 谷歌登入谷歌
- flask 登入Flask