例如,我現(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ù) | 類型 | 是否必填 | 最大長度 | 示例值 | 描述 |
dateline | int | 是 | 10 | 1712215131 | 超時時間60秒 |
username | string | 三選一 | 30 | 測試 | 用戶名 |
string | 三選一 | 40 | css@qq.com | 郵箱 | |
password | string | 否 | 32 | 123456 | 用戶密碼 |
phone | string | 三選一 | 11 | 110 | 用戶手機號碼 |
orgpath | string | 否 | 小胡網(wǎng)/技術部,小胡網(wǎng)/宣傳部 | 用戶所屬機構部門,使用逗號(,)分隔多個機構,使用斜杠(/)分隔上下級部門,如果沒有找到相應的機構或部門,會自動創(chuàng)建 | |
redirect | string | 否 | http://127.0.0.1 | 登錄成功后,跳轉(zhuǎn)的地址。默認跳轉(zhuǎn)到首頁 | |
token | string | 是 | 6aafb1afaab15c7d44b8a1e0733eb7e7f350a48ab8441353d5d29bd3ba116543 | 簽名字符串 |
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
檢查XH通用登錄是否開啟:系統(tǒng)首先檢查是否啟用了XH通用登錄功能。如果未開啟,則直接返回提示信息,如“XH通用登錄未開啟”。
檢查Token參數(shù):驗證請求中是否包含了必要的Token參數(shù)。如果Token是必要參數(shù)且未填寫,則返回提示信息,如“Token參數(shù)缺失”。
檢查請求中的時間戳是否在允許的范圍內(nèi)(通常是當前時間與一個合理的時間窗口內(nèi))。如果時間戳無效,則返回提示信息,如“驗證時間已過期,請重新獲取”。
對用戶名、郵箱、密碼、電話號碼、機構部門等參數(shù)進行非空和格式正確性驗證。
如果用戶名、郵箱、電話號碼參數(shù)都不存在,則返回相應的錯誤提示。
根據(jù)傳入的參數(shù)(如用戶名、密碼等)和服務器端的密鑰,生成一個Token。
將生成的Token與請求中提供的Token進行比較。如果Token不匹配,則返回提示信息,如“Token驗證失敗”。
用戶存在性查詢:根據(jù)用戶名、郵箱、電話號碼(三選一)查詢用戶UID是否存在。
用戶存在:更新用戶信息(可選,根據(jù)傳入的參數(shù)決定),并進行登錄操作,隨后重定向到指定頁面。
用戶不存在且允許注冊:檢查請求中是否至少包含username和email兩個參數(shù)。如果滿足條件,則根據(jù)傳入的參數(shù)進行注冊操作。注冊成功后,進行登錄并重定向到指定頁面。
信息同步:
在用戶登錄或注冊時,根據(jù)請求中的信息同步用戶的username(用戶名)、email(郵箱)、phone(手機號)、password(密碼)以及機構部門等信息。如果請求中未提供某些信息,則不更新這些信息。
機構部門信息解析:如果提供了機構部門信息,系統(tǒng)會根據(jù)指定的格式(使用逗號(,)分隔多個機構,使用斜杠(/)分隔上下級部門)進行解析。
機構部門關聯(lián)處理:
可能先刪除用戶現(xiàn)有的機構部門關聯(lián)(取決于系統(tǒng)設計)。
在數(shù)據(jù)庫中查找解析后的機構部門。
如果機構或部門不存在,則自動創(chuàng)建它們。
更新用戶的機構部門關聯(lián)信息。
在每個關鍵步驟(如參數(shù)驗證、用戶查詢、登錄/注冊成功/失敗、組織關系同步等)記錄日志。確保日志信息包含足夠的細節(jié),以便在需要時能夠重現(xiàn)用戶的行為和系統(tǒng)的響應。這有助于后續(xù)的審計、問題追蹤和系統(tǒng)維護。
$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)日志-用戶登錄中查看詳細信息。
更多建議: