验证状态:已源码核验、未联调(无 app 调用图);本页为流程编排页,不复制正本字段表,各步骤的协议契约、完成判据与错误出口以其链接的正本/stub 页为准(核验基线同各正本页:源码归纳 @ 2026-09-14)。

注册与登录

串起四族凭据(用户名 / 邮箱 / 手机号 / 第三方)从注册到登录、再到恢复登录态的完整启动链路。任何设备与分享操作都以有效登录态为前提;四族的登录入口不同,登录态恢复与 token 替换约束是共享的。

前置条件

  • 可用的中心服务地址;凭据携带(AES 加密 JWT Bearer)、租户自动注入与响应底座见HTTP 约定
  • 判定口径预告:认证失败也返回 HTTP 200 + status=1000,先读错误响应差异,不要把认证失败当网络错误。
  • 注册前置:邮箱 / 手机号注册需要先取验证码(见主路径第 1 步);第三方登录前置是账号已绑定第三方标识(绑定本身需要登录态)。
  • 账号与租户概念(登录后当前租户即用户个人空间租户)见账号与个人空间

主路径

  1. 注册(按凭据族,可选)
  2. 登录(四族入口):用户名族用户名登录;邮箱族邮箱登录;手机号族手机号登录;第三方族第三方账号登录(匿名可调,是取 token 的入口)。成功后持久化 data.authorization(AES 加密 JWT,透传 Authorization: Bearer 即可)、data.usernamedata.tenantId——tenantId 即后续请求的当前租户(用户个人空间租户)。
  3. 恢复登录态(冷启动 / 重新进入前台):用户名族恢复登录态;邮箱族恢复邮箱登录态;手机号族恢复手机号登录态。三族恢复调用都会新签发 token 并下发当前租户、用户资料与 App 侧 MQTT 账号(extraData);第三方族可重复调用第三方账号登录换取新 token。
  4. 凭据维护(可选):改密走修改登录密码(需登录态);找回密码只有邮箱 / 手机号族有通道:邮箱找回密码手机号找回密码(均需先取验证码)。

关键约束(登录限频与 token 替换)

  • 登录限频:用户名族同账号 3 秒内重复登录、24 小时高频都会失败(见用户名登录指向的机构正本)。第三方族按(类型, 第三方账号)组合计:3 秒内重复拒绝;24 小时滚动窗口内满 100 次进入 5 分钟冷却,error 为已插值文案、extraData.ss 为剩余秒数、extraData.message 为未插值模板(可本地化渲染倒计时),频控按组合而非用户名计——同一账号被高频尝试会影响所有知晓该组合的调用方(见第三方账号登录)。邮箱 / 手机号族的验证码与登录频控见各自机构正本页。
  • token 替换:三族恢复登录态不承诺「续期」——每次调用都是全新签发,App 必须替换本地旧 token、不得双 token 混用;旧 token 不被服务端吊销,但有效期自新签发时刻起算(prod 3 天 / 非 prod 99 天)。切换租户成功后服务端同样重签 token,必须替换(正本口径见该 stub 指向的机构页)。
  • 验证码前置:随机数本身不是验证码;验证码的过期窗口与重发规则以各发送验证码正本页为准,注册 / 找回 / 停用各流程按 type 区分用途。

失败与恢复

  • 认证失败族(HTTP 200 + status=1000,另有 401/1000 变体出口):统一引导重新登录,不是网络错误,不做自动重试(判定口径见错误响应差异)。
  • 登录限频:按 error/extraData 提示倒计时或节流(3 秒限频应在客户端预防性节流);见上文「关键约束」。
  • 凭据 / 账号错误:第三方族 Incorrect third party account or code(无绑定记录或绑定用户已不存在,同一文案不区分)与 Unbound tenant(绑定用户名下没有任何租户);用户名 / 邮箱 / 手机号族的凭据错误出口见各登录入口页指向的正本。
  • 验证码错误:过期或不符会被业务拒绝(status=422 族),出口文案与重试规则以各验证码 / 注册 / 找回正本页为准。
  • 第三方 code 现状:code 字段必填但服务端不校验其值(无平台对接逻辑)——「拿到第三方平台授权」与「平台登录」之间的真实鉴权链条完全在 App 侧。App 必须在第三方平台 OAuth / 授权成功后再取其用户标识调用 bind / login,否则任何知晓(类型, 账号)组合的一方都能登录或绑定该用户(见第三方账号登录绑定第三方账号的已知缺口节)。
  • 恢复登录态的防御分支:data 各字段为 null 的成功应答表示当前无登录态——引导重新登录,不要当作接口故障。

收尾