feat(auth): 开放公开注册,邀请码选填 - #357
Conversation
公开注册仍关闭自动建号,改为邀请码门槛,并补齐查看、轮换和补填邀请码接口。 Closes 1024XEngineer#355
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
覆盖空邀请码、发码碰撞、兑换接口以及账号中心邀请码加载/生成失败。
兑换成功只改了提示,同页余额与流水会停在旧数据。
|
结论接口数量本身不算冗余,三个接口分别对应 查询当前码、主动轮换、兑换邀请码 三个独立用例;真正的问题是语义有重叠且生命周期模型过薄。 当前轮换实现是直接覆盖 1. 接口是否冗余
建议:
2. 轮换后已发出去的旧码会怎样
3. 当前邀请码生命周期推演
建议的数据模型若产品要求“轮换后旧码永久失效”,建议把覆盖模型改成版本模型:
如果希望轮换后旧码仍有宽限期,也应保留版本记录,并让旧版本进入 建议补充的测试
验证已基于固定范围 |
johnnyzhang-eng
left a comment
There was a problem hiding this comment.
邀请码没有使用次数上限。used_count 在 quota/service.py 只递增、没有任何地方校验,config/quota.py 里也没有对应字段。
注册链路是 register_by_email → _create_credit_account(注册礼 register_gift_amount) + redeem_invite_code(双方各 invite_reward_amount),所以同一个码可以被无限次用来建号:每个新号自身拿到注册礼加被邀请奖励,邀请人每拉一个号再加一份。#351 合入后积分直接对应真实生成调用(generate_action_cost 一次 50),这条链路等于可以被无限复制成真实调用额度。
自邀检查 invite.user_id == user_id 挡的是「本人兑换自己的码」,挡不住「新注册的号填老号的码」—— 那恰好是设计流程本身。#326 当初关闭注册要控的就是这类敞口,而产品现在已经对外,建议合入前给 used_count 加一个可配上限,或给邀请奖励加总量/每日上限。
其余读下来没问题:with_for_update() 锁住了码行,InviteRecord.invitee_id 的唯一约束兜住并发重复兑换,邀请码 8 位 32 字母表经 secrets 生成,测试覆盖了自邀、重复填写、双方到账与碰撞重试。
邀请奖励页和工作台提示已分别由 1024XEngineer#362、1024XEngineer#363 承担,本 PR 只保留后端接口与 OpenAPI。
项目冷启动阶段,需要用户。如果前期就对邀请码的使用次数增加限制的话,那么会让用户反感甚至远离我们的产品,这有点得不偿失。 |
邀请码一般会有使用次数、有效期、状态等字段。不过现在还好没有后台什么的,也还没有运营需求。 |
冷启动不加兑换次数上限。并发轮换用 FOR UPDATE 串行化;invitee 唯一约束冲突返回已填写过邀请码。邀请双方奖励默认改为 200,与账号中心 PR 对齐。
注册不再返回「请填写邀请码」:前端从链接传入 invite_code,空码和非法字符统一为邀请码无效。
注册无邀请码只发注册赠送;有有效邀请码再发双方奖励。login-by-code 对未知邮箱建号。注册赠送默认改为 300,邀请奖励保持 200。
去掉登录后补填;邀请码 30 天过期,轮换插入新行并截断旧码有效期。
未过期邀请码仍可继续被使用并写入关系;邀请人每个 UTC 日最多入账 600 分,超出只跳过邀请人奖励。
Summary
POST /quota/invite/redeem(不再登录后补填)。QUOTA_INVITE_CODE_TTL_DAYS)。过期注册返回「邀请码已过期」(业务码 404);非法/不存在仍是「邀请码无效」。expires_at截到现在;邀请记录继续指向历史码。invite_code选填:无码只发注册赠送 300。login-by-code未知邮箱建号只送 300。QUOTA_INVITE_REWARD_DAILY_LIMIT=3,3×200=600)。计数只看windup_invite_record,不扫积分流水,因此不影响注册赠送、生成扣费,以及后续付费购买 / 套餐兑换(应使用独立CreditReason)。第 4 人起仍建号、仍写关系、被邀请人仍得 200,邀请人当日不再 +200。Closes #355
Test plan
POST /quota/invite/redeem已移除(404)login-by-code未知邮箱建号送 300