XH通用登錄v1.3及以上版本

2024-08-04 14:37 更新

該版本功能說明:

例如,我現(xiàn)在已登錄OA系統(tǒng),用戶名為測試,郵箱為css@qq.com,手機號碼為178。如果在Dzz系統(tǒng)中也存在相同的用戶名、電子郵件地址和手機號碼,那么通過這個特殊鏈接打開Dzz后就是該用戶的帳號。如果Dzz系統(tǒng)中沒有這些信息,則會根據(jù)特殊鏈接中的帳戶名和郵箱在Dzz系統(tǒng)中注冊一個新帳戶,并使用默認密碼登錄。管理員可以修改默認密碼。

接口地址:index.php?mod=xhlogin;

請求方式:跳轉(zhuǎn)方式;

請求地址:http://127.0.0.1/index.php?mod=xhlogin&dateline=XXX&email=XXX&orgpath=XXX&password=XXX&phone=XXX&username=XXX&token=XXX&redirect=XXX

接口說明:驗證成功后跳轉(zhuǎn)到DzzOffice首頁或者指定的頁面。注意:該接口可以直接通過后端登陸某個賬號,注意安全保密,切勿泄露XH通用登錄KAY,建議定期更換;

請求參數(shù):

參數(shù)類型是否必填最大長度示例值描述
datelineint101712215131超時時間60秒
usernamestring三選一30測試用戶名
emailstring三選一40css@qq.com郵箱
passwordstring32123456用戶密碼
phonestring三選一11110用戶手機號碼
orgpathstring小胡網(wǎng)/技術部,小胡網(wǎng)/宣傳部用戶所屬機構部門,使用逗號(,)分隔多個機構,使用斜杠(/)分隔上下級部門,如果沒有找到相應的機構或部門,會自動創(chuàng)建
redirectstringhttp://127.0.0.1登錄成功后,跳轉(zhuǎn)的地址。默認跳轉(zhuǎn)到首頁
tokenstring6aafb1afaab15c7d44b8a1e0733eb7e7f350a48ab8441353d5d29bd3ba116543簽名字符串

組合后的地址類似于:

http://127.0.0.1/index.php?mod=xhlogin&dateline=1712215131&email=css%40qq.com&orgpath=%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E6%8A%80%E6%9C%AF%E9%83%A8%2C%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E5%AE%A3%E4%BC%A0%E9%83%A8&password=123456&phone=110&username=%E6%B5%8B%E8%AF%95&token=7ef48626ae74d1eec1eadc2a12a26d6ba8558643fb58a66ae36dd1e3aa2a7e7f&redirect=http%3A%2F%2F127.0.0.1

原理與流程

  1. 初始檢查

檢查XH通用登錄是否開啟:系統(tǒng)首先檢查是否啟用了XH通用登錄功能。如果未開啟,則直接返回提示信息,如“XH通用登錄未開啟”。

檢查Token參數(shù):驗證請求中是否包含了必要的Token參數(shù)。如果Token是必要參數(shù)且未填寫,則返回提示信息,如“Token參數(shù)缺失”。

  1. 動態(tài)時間驗證(如果啟用)

檢查請求中的時間戳是否在允許的范圍內(nèi)(通常是當前時間與一個合理的時間窗口內(nèi))。如果時間戳無效,則返回提示信息,如“驗證時間已過期,請重新獲取”。

  1. 參數(shù)驗證

對用戶名、郵箱、密碼、電話號碼、機構部門等參數(shù)進行非空和格式正確性驗證。

如果用戶名、郵箱、電話號碼參數(shù)都不存在,則返回相應的錯誤提示。

  1. Token生成與驗證(如果適用)

根據(jù)傳入的參數(shù)(如用戶名、密碼等)和服務器端的密鑰,生成一個Token。

將生成的Token與請求中提供的Token進行比較。如果Token不匹配,則返回提示信息,如“Token驗證失敗”。

  1. 用戶登錄或注冊

用戶存在性查詢:根據(jù)用戶名、郵箱、電話號碼(三選一)查詢用戶UID是否存在。

用戶存在:更新用戶信息(可選,根據(jù)傳入的參數(shù)決定),并進行登錄操作,隨后重定向到指定頁面。

用戶不存在且允許注冊:檢查請求中是否至少包含username和email兩個參數(shù)。如果滿足條件,則根據(jù)傳入的參數(shù)進行注冊操作。注冊成功后,進行登錄并重定向到指定頁面。

信息同步:

在用戶登錄或注冊時,根據(jù)請求中的信息同步用戶的username(用戶名)、email(郵箱)、phone(手機號)、password(密碼)以及機構部門等信息。如果請求中未提供某些信息,則不更新這些信息。

  1. 組織關系同步

機構部門信息解析:如果提供了機構部門信息,系統(tǒng)會根據(jù)指定的格式(使用逗號(,)分隔多個機構,使用斜杠(/)分隔上下級部門)進行解析。

機構部門關聯(lián)處理:

可能先刪除用戶現(xiàn)有的機構部門關聯(lián)(取決于系統(tǒng)設計)。

在數(shù)據(jù)庫中查找解析后的機構部門。

如果機構或部門不存在,則自動創(chuàng)建它們。

更新用戶的機構部門關聯(lián)信息。

  1. 日志記錄

在每個關鍵步驟(如參數(shù)驗證、用戶查詢、登錄/注冊成功/失敗、組織關系同步等)記錄日志。確保日志信息包含足夠的細節(jié),以便在需要時能夠重現(xiàn)用戶的行為和系統(tǒng)的響應。這有助于后續(xù)的審計、問題追蹤和系統(tǒng)維護。

示例(php):

$key='bljt@2023';//XH通用登錄KAY
//參數(shù)
$params=array(
    'dateline' => '1712215131',
    'email'=>'css@qq.com',
    'username'=>'測試',
    'password'=>'123456',
    'phone' =>'110',
    'orgpath' =>'小胡網(wǎng)/技術部,小胡網(wǎng)/宣傳部'
);
//參數(shù)排列
ksort($params);
/* 排序后參數(shù)數(shù)組
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => 小胡網(wǎng)/技術部,小胡網(wǎng)/宣傳部 [password] => 123456 [phone] => 110 [username] => 測試 )
*/
//將參數(shù)轉(zhuǎn)換為url-encode字符串
$httpstr=http_build_query($params);
/* 編碼后的簽名字符串
dateline=1712215131&email=css%40qq.com&orgpath=%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E6%8A%80%E6%9C%AF%E9%83%A8%2C%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E5%AE%A3%E4%BC%A0%E9%83%A8&password=123456&phone=110&username=%E6%B5%8B%E8%AF%95
*/
//使用sha256計算簽名
 $token = hash_hmac('sha256',$httpstr,$key);
 /*計算后的簽名值
7ef48626ae74d1eec1eadc2a12a26d6ba8558643fb58a66ae36dd1e3aa2a7e7f
 */
// 重定向地址
$redirect='http://127.0.0.1';
// 組合 URL
$loginUrl = "http://127.0.0.1/index.php?mod=xhlogin&" . $httpstr . "&token=" . $token . "&redirect=" . urlencode($redirect);
/*組合后的地址
http://127.0.0.1/index.php?mod=xhlogin&dateline=1712215131&email=css%40qq.com&orgpath=%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E6%8A%80%E6%9C%AF%E9%83%A8%2C%E5%B0%8F%E8%83%A1%E7%BD%91%2F%E5%AE%A3%E4%BC%A0%E9%83%A8&password=123456&phone=110&username=%E6%B5%8B%E8%AF%95&token=7ef48626ae74d1eec1eadc2a12a26d6ba8558643fb58a66ae36dd1e3aa2a7e7f&redirect=http%3A%2F%2F127.0.0.1
*/
// 執(zhí)行重定向
header("Location: " . $loginUrl);

注意:

示例當中的參數(shù)即規(guī)定鍵名(數(shù)值或字符串)不能去掉,可以沒有規(guī)定鍵值。比如說只有郵箱和時間戳參數(shù)值,就是如下代碼:

$key='bljt@2023';//XH通用登錄KAY
//參數(shù)
$params=array(
    'dateline' => '1712215131',
    'email'=>'css@qq.com',
    'username'=>'',
    'password'=>'',
    'phone' =>'',
    'orgpath' =>''
);
//參數(shù)排列
ksort($params);
/* 排序后參數(shù)數(shù)組
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => [password] => [phone] => [username] => )
*/
//將參數(shù)轉(zhuǎn)換為url-encode字符串
$httpstr=http_build_query($params);
/* 編碼后的簽名字符串
dateline=1712215131&email=css%40qq.com&orgpath=&password=&phone=&username=
*/
//使用sha256計算簽名
 $token = hash_hmac('sha256',$httpstr,$key);
 /*計算后的簽名值
01b43c567ef38c5d941c0d042bf27c35cd91d7b13f01019456c44d913ddfacde
 */
// 重定向地址
$redirect='http://127.0.0.1';
/*組合后的地址
http://127.0.0.1/index.php?mod=xhlogin&dateline=1712215131&email=css%40qq.com&orgpath=&password=&phone=&username=&token=01b43c567ef38c5d941c0d042bf27c35cd91d7b13f01019456c44d913ddfacde&redirect=http%3A%2F%2F127.0.0.1
*/
// 執(zhí)行重定向
header("Location: " . $loginUrl);

提示信息說明:

提示信息可在系統(tǒng)日志-用戶登錄中查看詳細信息。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號