v0.14.0
邮件生命周期闭环 + 账号自助注销 + 可选限频版本。把 v0.13.0 引入的注册邮件验证补成完整闭环(重发、找回密码、换邮箱验证新地址),补上公开 SaaS 的合规底线(自助注销),并为凭据端点提供厂商中立的 per-IP 限频(呼应「不要验证码」的决策:不接验证码平台,用 Cloudflare 原生 rate limiting binding 防刷)。
新增能力
- 重发验证邮件(#118):
POST /api/auth/flaremo/resend-verification。未知地址与已验证身份返回同一成功形态(防账号枚举);注册完成页新增「重新发送验证邮件」。 - 自助找回密码(#118):
POST /api/auth/flaremo/forgot-password发送 1 小时有效的重置邮件,链接走既有/reset页面 + Better Auth 原生/api/auth/reset-password(重置成功自动撤销全部 session)。响应不区分地址是否注册。登录页「忘记密码」入口改指新/forgot-password页;自托管(无邮件 provider)在该页引导使用恢复密钥(/recover),原路径不变。 - 换邮箱验证新地址(#118):配置邮件 provider 后,改邮箱先验证当前密码 + 新地址占用(auth 与 domain 两处),向新地址发送 24h 确认邮件,点击
/verify-email-change后才切换登录邮箱(auth + domain 同步)。确认前旧邮箱继续有效,打错地址不再锁死后续邮件流。provider 为none的自托管保持立即生效。 - 账号自助注销(#124):
DELETE /api/app/account(当前密码确认)。domain 新增deleteFlaremoAccount:逐表显式删除该用户全部 D1 数据(memos/attachments/revisions/tags/relations/reactions/shares/webhooks/notifications/shortcuts/usage counters/embedding outbox/projects/tasks/task activity/settings + Better Auth 身份/session/PAT),children-first、不依赖运行时外键级联;R2 附件对象与 Vectorize 向量(确定性 ID 枚举,幂等)同步清除,未绑定 R2/Vectorize 的部署自动跳过。owner 账号不可通过此入口注销(403)。账户页新增危险区(仅成员可见)。 - 凭据端点可选限频(#122):部署绑定 Cloudflare rate-limiting binding
RATE_LIMITER后,/register、/resend-verification、/forgot-password与 Better Auth 的 sign-in/sign-up/forget-password/reset-password 路径按客户端 IP 分桶节流(超限 429);session 读取不受影响。未绑定该 binding 的部署行为完全不变;binding 故障 fail-open(放行并记 error 日志)。
Memos 兼容面变化
- 配置邮件 provider 的部署上,Memos 客户端注册路径(current
/api/v1/auth/signup、ConnectAuthService.SignUp)返回 403(#120):这些兼容面无法完成邮箱验证,为防绕过闸门不再创建未验证账号。未配置 provider 的自托管行为不变。 - 其余
/api/v1/*兼容面不变。
Cloudflare、数据库与认证影响
- 无数据库 migration、无新增必需资源。
- 新增可选 binding:
RATE_LIMITER(rate-limiting binding,如namespace_id = "1001"、limit = 30、period = "60")。自托管默认不绑定,行为与 v0.13.0 一致。 - 新增端点:
POST /api/auth/flaremo/resend-verification、POST /api/auth/flaremo/forgot-password、GET /api/auth/flaremo/verify-email-change、DELETE /api/app/account。全部受既有 Origin allowlist 契约约束(非安全方法必须携带精确 Origin)。 - 换邮箱语义变化(仅 provider 非 none 时):
POST /api/app/account/email响应新增verification_sent: true,邮箱在确认前不切换。
升级说明
- 自托管直接
pnpm deploy,零配置,行为不变(providernone时所有新端点要么 400 要么维持原路径)。 - 公开 SaaS / 多用户部署:建议绑定
RATE_LIMITER;admin与 Memos current 的既有用户删除入口本次未改动(仍为 v0.13.0 语义),如需彻底删除请走新的自助注销。