8926c0b109fb1a8a297248ebbe383c7d1f068951
1. 增至 8 位(backed/internal/handler/invite_code.go)
字符集 31 个不变(已去掉易混淆的 0/O/1/L),
空间从 31^6≈8.9 亿提升到 31^8≈8.5 万亿。
2. 新增重置接口 POST /api/auth/reset-invite
- resetInviteCode():复用 withUniqueInviteCode,唯一性由
invite_code 唯一索引 + 冲突重试保证(与首次生成同一套逻辑,
不做「先查后写」,并发下依然正确)
- 乐观锁:仅当库中旧码仍是本次读到的值时才替换,
避免两个并发重置互相覆盖导致其中一个返回的码实际已失效;
冲突时返回 409 提示刷新重试
- 用户当前无码时先补齐再重置,否则乐观锁条件会失效
- 记录 oldCode/newCode 便于排查
3. 前端(ProfileView)
- 邀请码行内新增重置按钮(环形箭头图标,重置中转圈)
- 点击先弹确认框,用 danger 样式并明确告知影响:
「原来的邀请码会立即失效,别人再用旧码填写将无法绑定;
已经通过旧码完成的邀请关系不受影响,积分也不会被收回」
- 成功后直接更新页面上的邀请码并提示
测试:8 位长度与字符集校验、5000 次生成无重复、
重置生成的新码格式合规、两个哨兵错误互不混淆。
Description
No description provided
Languages
Go
58.2%
Vue
35.3%
TypeScript
4.1%
CSS
1.5%
JavaScript
0.6%
Other
0.2%