例如,我現(xiàn)在已登錄OA系統(tǒng),用戶(hù)名為測(cè)試,郵箱為css@qq.com,手機(jī)號(hào)碼為178。如果在Dzz系統(tǒng)中也存在相同的用戶(hù)名、電子郵件地址和手機(jī)號(hào)碼,那么通過(guò)這個(gè)特殊鏈接打開(kāi)Dzz后就是該用戶(hù)的帳號(hào)。如果Dzz系統(tǒng)中沒(méi)有這些信息,則會(huì)根據(jù)特殊鏈接中的帳戶(hù)名和郵箱在Dzz系統(tǒng)中注冊(cè)一個(gè)新帳戶(hù),并使用默認(rèn)密碼登錄。管理員可以修改默認(rèn)密碼。
接口地址:index.php?mod=xhlogin;
請(qǐng)求方式:跳轉(zhuǎn)方式;
請(qǐng)求地址: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
接口說(shuō)明:驗(yàn)證成功后跳轉(zhuǎn)到DzzOffice首頁(yè)或者指定的頁(yè)面。注意:該接口可以直接通過(guò)后端登陸某個(gè)賬號(hào),注意安全保密,切勿泄露XH通用登錄KAY,建議定期更換;
參數(shù) | 類(lèi)型 | 是否必填 | 最大長(zhǎng)度 | 示例值 | 描述 |
dateline | int | 是 | 10 | 1712215131 | 超時(shí)時(shí)間60秒 |
username | string | 三選一 | 30 | 測(cè)試 | 用戶(hù)名 |
string | 三選一 | 40 | css@qq.com | 郵箱 | |
password | string | 否 | 32 | 123456 | 用戶(hù)密碼 |
phone | string | 三選一 | 11 | 110 | 用戶(hù)手機(jī)號(hào)碼 |
orgpath | string | 否 | 小胡網(wǎng)/技術(shù)部,小胡網(wǎng)/宣傳部 | 用戶(hù)所屬機(jī)構(gòu)部門(mén),使用逗號(hào)(,)分隔多個(gè)機(jī)構(gòu),使用斜杠(/)分隔上下級(jí)部門(mén),如果沒(méi)有找到相應(yīng)的機(jī)構(gòu)或部門(mén),會(huì)自動(dòng)創(chuàng)建 | |
redirect | string | 否 | http://127.0.0.1 | 登錄成功后,跳轉(zhuǎn)的地址。默認(rèn)跳轉(zhuǎn)到首頁(yè) | |
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通用登錄是否開(kāi)啟:系統(tǒng)首先檢查是否啟用了XH通用登錄功能。如果未開(kāi)啟,則直接返回提示信息,如“XH通用登錄未開(kāi)啟”。
檢查T(mén)oken參數(shù):驗(yàn)證請(qǐng)求中是否包含了必要的Token參數(shù)。如果Token是必要參數(shù)且未填寫(xiě),則返回提示信息,如“Token參數(shù)缺失”。
檢查請(qǐng)求中的時(shí)間戳是否在允許的范圍內(nèi)(通常是當(dāng)前時(shí)間與一個(gè)合理的時(shí)間窗口內(nèi))。如果時(shí)間戳無(wú)效,則返回提示信息,如“驗(yàn)證時(shí)間已過(guò)期,請(qǐng)重新獲取”。
對(duì)用戶(hù)名、郵箱、密碼、電話(huà)號(hào)碼、機(jī)構(gòu)部門(mén)等參數(shù)進(jìn)行非空和格式正確性驗(yàn)證。
如果用戶(hù)名、郵箱、電話(huà)號(hào)碼參數(shù)都不存在,則返回相應(yīng)的錯(cuò)誤提示。
根據(jù)傳入的參數(shù)(如用戶(hù)名、密碼等)和服務(wù)器端的密鑰,生成一個(gè)Token。
將生成的Token與請(qǐng)求中提供的Token進(jìn)行比較。如果Token不匹配,則返回提示信息,如“Token驗(yàn)證失敗”。
用戶(hù)存在性查詢(xún):根據(jù)用戶(hù)名、郵箱、電話(huà)號(hào)碼(三選一)查詢(xún)用戶(hù)UID是否存在。
用戶(hù)存在:更新用戶(hù)信息(可選,根據(jù)傳入的參數(shù)決定),并進(jìn)行登錄操作,隨后重定向到指定頁(yè)面。
用戶(hù)不存在且允許注冊(cè):檢查請(qǐng)求中是否至少包含username和email兩個(gè)參數(shù)。如果滿(mǎn)足條件,則根據(jù)傳入的參數(shù)進(jìn)行注冊(cè)操作。注冊(cè)成功后,進(jìn)行登錄并重定向到指定頁(yè)面。
信息同步:
在用戶(hù)登錄或注冊(cè)時(shí),根據(jù)請(qǐng)求中的信息同步用戶(hù)的username(用戶(hù)名)、email(郵箱)、phone(手機(jī)號(hào))、password(密碼)以及機(jī)構(gòu)部門(mén)等信息。如果請(qǐng)求中未提供某些信息,則不更新這些信息。
機(jī)構(gòu)部門(mén)信息解析:如果提供了機(jī)構(gòu)部門(mén)信息,系統(tǒng)會(huì)根據(jù)指定的格式(使用逗號(hào)(,)分隔多個(gè)機(jī)構(gòu),使用斜杠(/)分隔上下級(jí)部門(mén))進(jìn)行解析。
機(jī)構(gòu)部門(mén)關(guān)聯(lián)處理:
可能先刪除用戶(hù)現(xiàn)有的機(jī)構(gòu)部門(mén)關(guān)聯(lián)(取決于系統(tǒng)設(shè)計(jì))。
在數(shù)據(jù)庫(kù)中查找解析后的機(jī)構(gòu)部門(mén)。
如果機(jī)構(gòu)或部門(mén)不存在,則自動(dòng)創(chuàng)建它們。
更新用戶(hù)的機(jī)構(gòu)部門(mén)關(guān)聯(lián)信息。
在每個(gè)關(guān)鍵步驟(如參數(shù)驗(yàn)證、用戶(hù)查詢(xún)、登錄/注冊(cè)成功/失敗、組織關(guān)系同步等)記錄日志。確保日志信息包含足夠的細(xì)節(jié),以便在需要時(shí)能夠重現(xiàn)用戶(hù)的行為和系統(tǒng)的響應(yīng)。這有助于后續(xù)的審計(jì)、問(wèn)題追蹤和系統(tǒng)維護(hù)。
$key='bljt@2023';//XH通用登錄KAY
//參數(shù)
$params=array(
'dateline' => '1712215131',
'email'=>'css@qq.com',
'username'=>'測(cè)試',
'password'=>'123456',
'phone' =>'110',
'orgpath' =>'小胡網(wǎng)/技術(shù)部,小胡網(wǎng)/宣傳部'
);
//參數(shù)排列
ksort($params);
/* 排序后參數(shù)數(shù)組
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => 小胡網(wǎng)/技術(shù)部,小胡網(wǎng)/宣傳部 [password] => 123456 [phone] => 110 [username] => 測(cè)試 )
*/
//將參數(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計(jì)算簽名
$token = hash_hmac('sha256',$httpstr,$key);
/*計(jì)算后的簽名值
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);
示例當(dāng)中的參數(shù)即規(guī)定鍵名(數(shù)值或字符串)不能去掉,可以沒(méi)有規(guī)定鍵值。比如說(shuō)只有郵箱和時(shí)間戳參數(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計(jì)算簽名
$token = hash_hmac('sha256',$httpstr,$key);
/*計(jì)算后的簽名值
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)日志-用戶(hù)登錄中查看詳細(xì)信息。
更多建議: