feat(open): 重构C端认证并支持密码重置

This commit is contained in:
2026-08-17 09:29:42 +08:00
parent 0591ff67d0
commit 7687ef4f37
18 changed files with 500 additions and 187 deletions

72
sql/app_user_fix.sql Normal file
View File

@@ -0,0 +1,72 @@
-- ============================================================
-- app_user 表结构修复与字段扩展
-- 用途:支持手机号 + 微信小程序登录,补充常用用户字段
-- ============================================================
-- 通用 helper列不存在时才添加
DROP PROCEDURE IF EXISTS add_app_user_column;
DELIMITER $$
CREATE PROCEDURE add_app_user_column(
IN col_name VARCHAR(64),
IN col_def VARCHAR(256)
)
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'app_user'
AND COLUMN_NAME = col_name
) THEN
SET @sql = CONCAT('ALTER TABLE app_user ADD COLUMN ', col_name, ' ', col_def);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END$$
DELIMITER ;
-- 1. 补充原缺失的 username 列(注册/认证需要)
CALL add_app_user_column('username', 'VARCHAR(64) COMMENT ''用户名'' AFTER id');
-- 2. 补充 BaseEntity 审计/逻辑删除列MyBatis-Plus 自动填充与逻辑删除依赖)
CALL add_app_user_column('is_deleted', 'TINYINT NOT NULL DEFAULT 0 COMMENT ''逻辑删除(0-否 1-是)'' AFTER status');
CALL add_app_user_column('create_time', 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ''创建时间'' AFTER is_deleted');
CALL add_app_user_column('update_time', 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ''更新时间'' AFTER create_time');
CALL add_app_user_column('create_by', 'BIGINT DEFAULT NULL COMMENT ''创建人'' AFTER update_time');
CALL add_app_user_column('update_by', 'BIGINT DEFAULT NULL COMMENT ''更新人'' AFTER create_by');
-- 3. 微信小程序登录相关字段
CALL add_app_user_column('unionid', 'VARCHAR(64) DEFAULT NULL COMMENT ''微信unionid'' AFTER wechat_openid');
CALL add_app_user_column('session_key', 'VARCHAR(128) DEFAULT NULL COMMENT ''微信小程序session_key'' AFTER unionid');
CALL add_app_user_column('register_source', 'TINYINT DEFAULT 1 COMMENT ''注册来源(1-手机号 2-微信小程序)'' AFTER session_key');
-- 4. 常用用户字段
CALL add_app_user_column('birthday', 'DATE DEFAULT NULL COMMENT ''生日'' AFTER register_source');
CALL add_app_user_column('last_login_time', 'DATETIME DEFAULT NULL COMMENT ''最后登录时间'' AFTER birthday');
DROP PROCEDURE IF EXISTS add_app_user_column;
-- 5. 删除多余的 user_id 列
-- 实体 ClientUser 主键为 BaseEntity.id列名 id代码中 userId 均由 "id AS userId" 映射而来,
-- 表内遗留的 user_id 列NOT NULL 无默认值)导致 INSERT 未写该列时报 "Field 'user_id' doesn't have a default value"。
-- 该列未被任何代码引用,直接删除以消除冗余。
SET @col_exists = (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'app_user'
AND COLUMN_NAME = 'user_id'
);
SET @sql = IF(
@col_exists > 0,
'ALTER TABLE app_user DROP COLUMN user_id',
'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 6. 扩大 password 列BCrypt 加密后固定 60 字符,原 VARCHAR(32) 会触发 Data too long
ALTER TABLE app_user MODIFY COLUMN password VARCHAR(100) NOT NULL COMMENT '密码(加密)';
-- 7. 扩大 sys_log.error_msg避免长异常信息被截断
ALTER TABLE sys_log MODIFY COLUMN error_msg VARCHAR(2000) COMMENT '错误信息';

View File

@@ -423,7 +423,7 @@ CREATE TABLE `sys_log` (
`os` VARCHAR(100) COMMENT '操作系统',
`browser` VARCHAR(100) COMMENT '浏览器',
`status` TINYINT DEFAULT 1 COMMENT '0失败 1成功',
`error_msg` VARCHAR(1000) COMMENT '错误信息',
`error_msg` VARCHAR(2000) COMMENT '错误信息',
`execution_time` INT COMMENT '执行时间(ms)',
`create_time` DATETIME COMMENT '操作时间',
PRIMARY KEY (`id`) USING BTREE,