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

2024-08-04 14:37 更新

该版本功能说明:

例如,我现在已登录OA系统,用户名为测试,邮箱为css@qq.com,手机号码为178。如果在Dzz系统中也存在相同的用户名、电子邮件地址和手机号码,那么通过这个特殊链接打开Dzz后就是该用户的帐号。如果Dzz系统中没有这些信息,则会根据特殊链接中的帐户名和邮箱在Dzz系统中注册一个新帐户,并使用默认密码登录。管理员可以修改默认密码。

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

请求方式:跳转方式;

请求地址: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

接口说明:验证成功后跳转到DzzOffice首页或者指定的页面。注意:该接口可以直接通过后端登陆某个账号,注意安全保密,切勿泄露XH通用登录KAY,建议定期更换;

请求参数:

参数类型是否必填最大长度示例值描述
datelineint101712215131超时时间60秒
usernamestring三选一30测试用户名
emailstring三选一40css@qq.com邮箱
passwordstring32123456用户密码
phonestring三选一11110用户手机号码
orgpathstring小胡网/技术部,小胡网/宣传部用户所属机构部门,使用逗号(,)分隔多个机构,使用斜杠(/)分隔上下级部门,如果没有找到相应的机构或部门,会自动创建
redirectstringhttp://127.0.0.1登录成功后,跳转的地址。默认跳转到首页
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通用登录是否开启:系统首先检查是否启用了XH通用登录功能。如果未开启,则直接返回提示信息,如“XH通用登录未开启”。

检查Token参数:验证请求中是否包含了必要的Token参数。如果Token是必要参数且未填写,则返回提示信息,如“Token参数缺失”。

  1. 动态时间验证(如果启用)

检查请求中的时间戳是否在允许的范围内(通常是当前时间与一个合理的时间窗口内)。如果时间戳无效,则返回提示信息,如“验证时间已过期,请重新获取”。

  1. 参数验证

对用户名、邮箱、密码、电话号码、机构部门等参数进行非空和格式正确性验证。

如果用户名、邮箱、电话号码参数都不存在,则返回相应的错误提示。

  1. Token生成与验证(如果适用)

根据传入的参数(如用户名、密码等)和服务器端的密钥,生成一个Token。

将生成的Token与请求中提供的Token进行比较。如果Token不匹配,则返回提示信息,如“Token验证失败”。

  1. 用户登录或注册

用户存在性查询:根据用户名、邮箱、电话号码(三选一)查询用户UID是否存在。

用户存在:更新用户信息(可选,根据传入的参数决定),并进行登录操作,随后重定向到指定页面。

用户不存在且允许注册:检查请求中是否至少包含username和email两个参数。如果满足条件,则根据传入的参数进行注册操作。注册成功后,进行登录并重定向到指定页面。

信息同步:

在用户登录或注册时,根据请求中的信息同步用户的username(用户名)、email(邮箱)、phone(手机号)、password(密码)以及机构部门等信息。如果请求中未提供某些信息,则不更新这些信息。

  1. 组织关系同步

机构部门信息解析:如果提供了机构部门信息,系统会根据指定的格式(使用逗号(,)分隔多个机构,使用斜杠(/)分隔上下级部门)进行解析。

机构部门关联处理:

可能先删除用户现有的机构部门关联(取决于系统设计)。

在数据库中查找解析后的机构部门。

如果机构或部门不存在,则自动创建它们。

更新用户的机构部门关联信息。

  1. 日志记录

在每个关键步骤(如参数验证、用户查询、登录/注册成功/失败、组织关系同步等)记录日志。确保日志信息包含足够的细节,以便在需要时能够重现用户的行为和系统的响应。这有助于后续的审计、问题追踪和系统维护。

示例(php):

$key='bljt@2023';//XH通用登录KAY
//参数
$params=array(
    'dateline' => '1712215131',
    'email'=>'css@qq.com',
    'username'=>'测试',
    'password'=>'123456',
    'phone' =>'110',
    'orgpath' =>'小胡网/技术部,小胡网/宣传部'
);
//参数排列
ksort($params);
/* 排序后参数数组
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => 小胡网/技术部,小胡网/宣传部 [password] => 123456 [phone] => 110 [username] => 测试 )
*/
//将参数转换为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
*/
// 执行重定向
header("Location: " . $loginUrl);

注意:

示例当中的参数即规定键名(数值或字符串)不能去掉,可以没有规定键值。比如说只有邮箱和时间戳参数值,就是如下代码:

$key='bljt@2023';//XH通用登录KAY
//参数
$params=array(
    'dateline' => '1712215131',
    'email'=>'css@qq.com',
    'username'=>'',
    'password'=>'',
    'phone' =>'',
    'orgpath' =>''
);
//参数排列
ksort($params);
/* 排序后参数数组
Array ( [dateline] => 1712215131 [email] => css@qq.com [orgpath] => [password] => [phone] => [username] => )
*/
//将参数转换为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
*/
// 执行重定向
header("Location: " . $loginUrl);

提示信息说明:

提示信息可在系统日志-用户登录中查看详细信息。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号