Skip to content

会员用户体系 ​

会员是 C 端注册用户,独立于管理员的 sys_user 账号体系,存储在 sys_member 表。

表结构 ​

字段类型说明
snvarchar(32)用户编号,全局唯一,pkg/sn 统一生成(cf 前缀 + 8 位小写字母和数字),管理端列表展示
nickname / real_namevarchar(32)昵称 / 姓名
accountvarchar(32)登录账号,可空唯一索引(未设置为 NULL),密码登录的凭据
mobilevarchar(16)手机号,可空唯一索引(未绑定为 NULL),小程序 code 登录建号时允许为空
passwordvarchar(128)bcrypt 密文,注册时设置初始密码,短信登录不受影响
login_idvarchar(64)当前登录会话 ID,重新登录后旧会话失效
avatarvarchar(512)头像相对路径,展示时按当前存储渠道补全
gender / age / birthday-性别(1男 2女 3未知)、年龄、出生日期
register_ip / login_ipvarchar(64)注册 IP / 最近登录 IP
registered_at / logged_atdatetime(3)注册时间 / 最近登录时间
balancedecimal(12,2)账户余额(Go 侧字符串承载,避免浮点误差)
register_sourcetinyint注册来源:1 微信小程序,2 微信公众号,3 iOS,4 Android
statustinyint账号状态:1 启用,2 禁用

注册与登录 ​

  • 注册支持手机号 + 短信验证码,登录账号默认使用手机号,初始密码为 123456,默认昵称与头像取自平台配置中的「用户端配置」;
  • 小程序端支持 code 登录:服务端用一次性 code 换取 openid,已绑定则直接登录,未绑定则自动创建会员并写入平台身份;新会员不要求手机号,账号、密码与手机号均为空;
  • 登录支持账号密码、手机号 + 验证码与小程序 code三种方式;账号不存在时明确提示「账号不存在」;
  • 手机号不是登录必需项,用户登录后可在「手机号管理」中输入新手机号与场景 3 验证码自行绑定或更换;
  • 注册成功直接返回令牌,并提示用户及时修改初始密码;密码只以 bcrypt 密文保存。

验证码安全策略 ​

短信验证码是独立于认证接口的通用能力,路由为 POST /api/sms/code,限流基于 Redis 计数实现。

策略值
有效期5 分钟
分钟限流同一手机号同一场景每分钟最多 2 条
窗口限流同一手机号同一场景 5 分钟内累计超过 5 条
超限禁令触发窗口限流后禁止发送 30 分钟,并提示用户「账号已被限制30分钟」
错误容忍校验错误超过 5 次验证码立即作废
使用方式一次性,校验成功即删除
审计所有发送与拦截行为写入短信发送记录,拦截请求记录具体原因

短信通过 pkg/sms 按系统短信配置(渠道、签名、验证码模板)发送,结果写入短信发送记录。

资料与账号安全 ​

  • 可修改:昵称、姓名、头像、登录账号(唯一)、登录密码(强度校验)、手机号(未绑定时新增绑定,已绑定时更换;新手机号需验证码校验,唯一);
  • 修改密码成功后当前会话立即失效,需重新登录;
  • 手机号脱敏规则由 pkg/mask 统一提供(138****8001),展示型接口统一调用。

管理端能力 ​

  • 「用户管理 → 系统用户」页面:编号、用户、姓名、手机号(脱敏)、性别、年龄、出生日期、余额、注册来源、状态、注册时间与 IP、最近登录时间与 IP;
  • 一键启用/禁用(v-perm 权限控制),禁用后会员令牌即时失效;
  • 关键字搜索覆盖编号、昵称、姓名、账号、手机号。

用户端登录方式展示 ​

登录页同时仅展示一种方式。小程序默认一键登录,下方以手机号、账号图标切换;切换后可通过其他方式图标返回一键登录。非小程序默认账号密码登录,可切换手机号验证码。协议勾选对所有登录方式生效,提交过程中禁止切换,切换不绕过短信倒计时限制。