优化小程序
This commit is contained in:
1 parent
2e2b837a20
commit
727319a6eb
24 files changed
+1509
-200
No files matched your search
@@ -0,0 +1,27 @@
|
||||
-- 清理「注册未完成」的残留身份(历史遗留)。
|
||||
-- 旧版本在第一步核验通过时就建号,第二步企业归属超时未完成时,
|
||||
-- 账号名/手机号被占用却无法使用,重新注册会提示「该账号已被占用」。
|
||||
-- 新版本已做到:第二步才建号 + 令牌过期回滚 + 校验时自动回收孤儿身份,
|
||||
-- 本脚本仅用于手动清理历史残留(注意:account / mobile 有唯一索引,
|
||||
-- 软删仍然占着索引,因此这里用物理删除)。
|
||||
--
|
||||
-- ① 先查:确认这些身份确实没企业归属、也没登录过
|
||||
SELECT i.id, i.account, i.mobile, i.nickname, i.create_time
|
||||
FROM yz_auth_identity i
|
||||
WHERE i.last_login_at IS NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM yz_auth_tenant_user t
|
||||
WHERE t.identity_id = i.id AND t.delete_time IS NULL
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM yz_auth_tenant_apply a
|
||||
WHERE a.identity_id = i.id AND a.delete_time IS NULL
|
||||
);
|
||||
|
||||
-- ② 再清:把 '账号名' 换成第①步查到的账号(手机号注册则改用 mobile = '手机号')
|
||||
DELETE FROM yz_auth_identity_third
|
||||
WHERE identity_id IN (
|
||||
SELECT id FROM (SELECT id FROM yz_auth_identity WHERE account = '账号名') x
|
||||
);
|
||||
|
||||
DELETE FROM yz_auth_identity WHERE account = '账号名';
|
||||
@@ -0,0 +1,21 @@
|
||||
-- 微信小程序扫码注册核验会话:
|
||||
-- PC 注册页发起会话并展示小程序码(scene)→ 用户微信扫码进入小程序「注册确认」页 →
|
||||
-- 小程序端 wx.login 拿 code(可选手机号快速验证)调 /auth/register/mini/confirm →
|
||||
-- 服务端 code2session 得 openid/unionid 写入本表 → PC 端轮询到已确认后继续注册,
|
||||
-- 第一步核验(mode=mini)按 scene 核销并取出 openid(注册完成后绑定小程序登录)。
|
||||
CREATE TABLE IF NOT EXISTS `yz_auth_mini_register` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`scene` VARCHAR(64) NOT NULL COMMENT '注册会话标识(小程序码 scene)',
|
||||
`openid` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '确认用户的小程序 openid',
|
||||
`unionid` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '确认用户的 unionid(同主体多端互通)',
|
||||
`mobile` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '手机号快速验证拿到的手机号(可选)',
|
||||
`app_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '确认时所用的小程序 AppID(多应用场景)',
|
||||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待确认 1已确认 2已核销 3已过期',
|
||||
`expire_at` DATETIME NOT NULL COMMENT '过期时间',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_scene` (`scene`),
|
||||
KEY `idx_openid` (`openid`),
|
||||
KEY `idx_expire_at` (`expire_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信小程序扫码注册核验会话';
|
||||
@@ -0,0 +1,25 @@
|
||||
-- 统一认证:注册会话(第一步核验 → 第二步企业归属)
|
||||
-- 之前注册会话只存在进程内存里,服务重启 / 多副本部署 / 填表超时都会导致
|
||||
-- 「注册会话已失效,请重新注册」。改为落库后:
|
||||
-- ① 重启、多实例共享都不丢;② 有效期可放宽到 2 小时(填企业资料+上传执照足够);
|
||||
-- ③ 身份仍在第二步才创建,超时/放弃时不会留下占用账号的半成品身份。
|
||||
CREATE TABLE IF NOT EXISTS `yz_auth_register_session` (
|
||||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`token` VARCHAR(64) NOT NULL COMMENT '注册令牌(第一步核验通过后签发)',
|
||||
`account` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '账号名(账号 / 小程序注册;短信注册为空)',
|
||||
`mobile` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '手机号(短信注册)',
|
||||
`nickname` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`password_hash` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '待注册密码哈希(argon2id PHC 格式)',
|
||||
`password_algo` VARCHAR(16) NOT NULL DEFAULT 'argon2id',
|
||||
`openid` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '核验得到的微信 openid',
|
||||
`unionid` VARCHAR(64) NOT NULL DEFAULT '',
|
||||
`provider` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'wechat(公众号) / wechat_mini(小程序)',
|
||||
`identity_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '第二步建号后写回;0 = 尚未建号',
|
||||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待完成 1已完成',
|
||||
`expire_at` DATETIME NOT NULL COMMENT '过期时间',
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`update_time` DATETIME DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_token` (`token`),
|
||||
KEY `idx_expire_at` (`expire_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统一认证-注册会话';
|
||||
@@ -0,0 +1,82 @@
|
||||
-- 修复:注册「创建企业」审批通过后,申请人登录提示「该账号未绑定任何企业」。
|
||||
--
|
||||
-- 两个叠在一起的 bug:
|
||||
-- ① finishApply 没把新建租户 tid 回写到申请单 → yz_auth_tenant_apply.tid 一直是 0,
|
||||
-- 事后无法按 tid 追溯/修数据(代码已修复)。
|
||||
-- ② 绑定时调用 SyncTenantUser 按「手机/邮箱/账号」归并键匹配身份,账号注册的身份
|
||||
-- 没有手机号、邮箱,企业内账号又是拼出来的 user{id},匹配不到 → 新建了一个身份
|
||||
-- (account=user{id})并绑定到新租户,申请人自己的身份反而没有绑定记录
|
||||
-- (代码已改为按 identity_id 直接写绑定)。
|
||||
-- 本脚本修正【已审批的历史数据】,下列语句均可直接执行,无需替换占位符。
|
||||
|
||||
-- ============ ① 回填申请单的 tid(按企业名称匹配新建的租户) ============
|
||||
UPDATE yz_auth_tenant_apply a
|
||||
JOIN yz_system_tenant t
|
||||
ON t.tenant_name = a.tenant_name AND t.delete_time IS NULL
|
||||
SET a.tid = t.id, a.update_time = NOW()
|
||||
WHERE a.type = 2 AND a.status = 1 AND a.delete_time IS NULL
|
||||
AND (a.tid = 0 OR a.tid IS NULL);
|
||||
|
||||
-- ============ ② 排查:申请 / 身份 / 绑定 / 租户对照 ============
|
||||
SELECT a.id AS apply_id, a.status AS apply_status, a.tid, a.tenant_name,
|
||||
a.identity_id AS apply_identity, ai.account AS apply_account, ai.mobile AS apply_mobile,
|
||||
tu.id AS bind_id, tu.identity_id AS bind_identity, bi.account AS bind_account,
|
||||
tu.status AS bind_status, tu.delete_time AS bind_deleted, tu.group_id,
|
||||
t.status AS tenant_status
|
||||
FROM yz_auth_tenant_apply a
|
||||
LEFT JOIN yz_auth_identity ai ON ai.id = a.identity_id
|
||||
LEFT JOIN yz_auth_tenant_user tu ON tu.tid = a.tid
|
||||
LEFT JOIN yz_auth_identity bi ON bi.id = tu.identity_id
|
||||
LEFT JOIN yz_system_tenant t ON t.id = a.tid
|
||||
WHERE a.delete_time IS NULL
|
||||
ORDER BY a.id DESC
|
||||
LIMIT 20;
|
||||
-- 关注:bind_identity 是否 = apply_identity;bind_status=1;bind_deleted=NULL;tenant_status=1
|
||||
|
||||
-- ============ ③ 修正绑错人的行(改指到申请人,并复位状态) ============
|
||||
UPDATE yz_auth_tenant_user tu
|
||||
JOIN yz_auth_tenant_apply a
|
||||
ON a.tid = tu.tid AND a.type = 2 AND a.status = 1 AND a.delete_time IS NULL
|
||||
SET tu.identity_id = a.identity_id, tu.status = 1, tu.is_default = 1,
|
||||
tu.delete_time = NULL, tu.update_time = NOW()
|
||||
WHERE tu.identity_id <> a.identity_id;
|
||||
|
||||
-- ============ ④ 修正「绑对人但状态异常」的行(status≠1 或已软删) ============
|
||||
UPDATE yz_auth_tenant_user tu
|
||||
JOIN yz_auth_tenant_apply a
|
||||
ON a.tid = tu.tid AND a.type = 2 AND a.status = 1 AND a.delete_time IS NULL
|
||||
SET tu.status = 1, tu.is_default = 1, tu.delete_time = NULL, tu.update_time = NOW()
|
||||
WHERE tu.identity_id = a.identity_id
|
||||
AND (tu.status <> 1 OR tu.delete_time IS NOT NULL);
|
||||
|
||||
-- ============ ⑤ 兜底:申请人压根没有绑定行时补一条 ============
|
||||
INSERT INTO yz_auth_tenant_user
|
||||
(tid, identity_id, account, name, phone, email, group_id, org_id, is_default, status, create_time)
|
||||
SELECT a.tid, a.identity_id,
|
||||
COALESCE(NULLIF(i.mobile, ''), NULLIF(i.account, ''), CONCAT('user', a.identity_id)),
|
||||
COALESCE(i.nickname, ''), i.mobile, i.email,
|
||||
0, 0, 1, 1, NOW()
|
||||
FROM yz_auth_tenant_apply a
|
||||
JOIN yz_auth_identity i ON i.id = a.identity_id
|
||||
WHERE a.type = 2 AND a.status = 1 AND a.tid > 0 AND a.delete_time IS NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM yz_auth_tenant_user tu
|
||||
WHERE tu.tid = a.tid AND tu.identity_id = a.identity_id
|
||||
);
|
||||
|
||||
-- ============ ⑥ 核对:申请人名下应能看到企业 ============
|
||||
SELECT tu.identity_id, tu.tid, tu.status AS bind_status, tu.is_default, tu.group_id,
|
||||
t.tenant_name, t.status AS tenant_status
|
||||
FROM yz_auth_tenant_user tu
|
||||
JOIN yz_system_tenant t ON t.id = tu.tid
|
||||
JOIN yz_auth_tenant_apply a
|
||||
ON a.tid = tu.tid AND a.type = 2 AND a.status = 1 AND a.identity_id = tu.identity_id;
|
||||
|
||||
-- ============ ⑦ 可选:清理审批时误建的身份(确认无任何绑定后再执行) ============
|
||||
-- SELECT id, account, mobile, last_login_at FROM yz_auth_identity
|
||||
-- WHERE account LIKE 'user%' AND last_login_at IS NULL
|
||||
-- AND NOT EXISTS (SELECT 1 FROM yz_auth_tenant_user tu WHERE tu.identity_id = yz_auth_identity.id);
|
||||
-- DELETE i FROM yz_auth_identity i
|
||||
-- WHERE i.account LIKE 'user%' AND i.last_login_at IS NULL
|
||||
-- AND NOT EXISTS (SELECT 1 FROM yz_auth_tenant_user tu WHERE tu.identity_id = i.id)
|
||||
-- AND NOT EXISTS (SELECT 1 FROM yz_auth_identity_third th WHERE th.identity_id = i.id);
|
||||
Reference in new issue
Block a user