验证状态:已源码核验、未联调(无 app 调用图);本页为流程编排页,双变体的完整契约与删除范围表以其链接的正本页为准,不在本页复述(核验基线同各正本页:源码归纳 @ 2026-09-14)。

账号注销

同一注销结果有两条入口(双变体),安全强度不同、删除链路完全同源:零售裸注销/v1/retail 新代专属,免验证码、免频控)与验证码注销(第一代 user Plus,Web 调用链)。两者最终都发布同一条 JMS 消息,由同一监听器异步删除该用户的个人空间数据与账户本身。

前置条件

  • 有效登录态:注销对象即凭据认证上下文的用户名(两个变体一致)。
  • 已向用户明确告知数据删除范围与不可逆性(个人空间数据与账户本身软删,见下文「异步删除范围」)。
  • App 侧强确认交互(二次确认弹层、输入文案等)必须先行——裸注销变体没有任何服务端二次验证。

主路径(双变体)

变体 A:零售裸注销(零售 App 通道)

  1. 强确认后调用注销账号(零售端):无请求体、无验证码参数,受理即返回。
  2. status=200data=true 表示注销请求已受理(JMS 消息已发布),不表示删除已完成——删除由监听器异步执行,受理到数据不可见的窗口无 SLA 证据。
  3. 受理成功后立即清除本地 token、用户资料并结束会话;此后持有旧 token 的请求预期以已注销用户失败。重复调用仍返回 true(无存在性校验)——首次成功即终结流程,不要轮询重试。

变体 B:验证码注销(Web 调用链,机构手册正本)

  1. 先取验证码:发送邮箱验证码发送短信验证码type 用停用用途(账号须已绑定邮箱或手机号其一)。
  2. 调用停用账户:零售侧入口页停用账户,叙事与端点入口见机构手册正本停用账户(机构手册)(契约全量事实见其链接的清单层)——验证码过期或不符即拒绝、24 小时内最多 3 次尝试、同用户并发锁、admin 账号显式拒绝。
  3. 验证通过后发布同一条 JMS 消息——之后的删除链路与变体 A 完全同源(对照表见注销账号(零售端)的双变体小节)。

异步删除范围(摘要)

监听器消费 JMS 消息后:admin 用户名直接跳过(不注销);普通用户按其全部用户个人空间租户软删十类数据——发出的与收到的分享记录、分享出去的与名下的设备投影、第三方账号绑定、手机号绑定、邮箱绑定、用户账户本身、个人空间租户、用户-租户绑定——并清理登录租户缓存。设备库存租户 pcm 的库存投影与他人数据不受影响;按按文件号上传落盘的文件目录不在删除范围。逐项锚定条件的完整表格见注销账号(零售端)

选择建议

  • 零售 App 的注销通道只有变体 A(/v1/retail 用户中心唯一端点);变体 B 属第一代 user Plus 的 Web 调用链,零售 App 不应拼装调用。
  • 变体 A 免验证码、免频控:任何持有该用户有效 token 的一方(含 token 泄露场景)都能直接发起不可逆注销。App 必须以本地强验证补齐(二次确认、输入文案);对注销后果特别敏感的场景,可评估引导用户改走 Web 端验证码变体。
  • 两个变体的差别只在触发前的验证强度,受理之后的删除范围与异步语义完全一致——不要试图「组合」两者(变体 A 不接受验证码参数,变体 B 不支持免验证直调),也不要假设验证码变体删得更干净。

失败与恢复

  • 变体 A 无业务拒绝分支:失败出口只有认证失败族(HTTP 200 + status=1000,未登录 / 凭据失效 → 重新登录)与协议 / 服务器错误族;判定口径见错误响应差异
  • 变体 B 的失败出口(文案与频控细节见机构正本页):未登录、admin 拒绝、24 小时 ×3 频控(Too many deactivation attempts…)、验证码过期 / 不符、并发锁获取失败。频控恢复按次日窗口或正本页文案提示。
  • data=true 不是完成信号:删除异步执行、最终一致,App 不得在受理后继续以旧 token 调用业务接口,也不应假设用户数据立即可查地为空。
  • 受理成功但本地清理失败的极端场景:以「已受理」为准终结流程并维持本地登出态,不要再次调用注销端点「补一次」。

收尾

  • 本地清理:token、用户资料、设备列表缓存与 MQTT 会话;多设备在线时其他设备的踢出行为未由源码闭合(正本「已知缺口」),能触达的其余设备应做本地登出处理。
  • 提示用户:注销只影响其个人空间数据与账户本身;设备库存与其他用户的数据不受影响;落盘文件残留行为未由源码闭合。
  • 注销后如需继续使用服务,需另行注册或使用其他账号(入口见注册与登录);原账号数据已随注销软删,不要向用户承诺可恢复。