POST/api/v1/auth/login/otp手机号 / 邮箱 + OTP 登录

先经 otp/send(scene=login)发码并经 otp/verify 换取已验证工单,再登录。OTP 因素默认 60 分,单独达标。

Request

Headers

NameData TypeRequiredDescription
Content-TypestringYes请求体内容类型(默认值 "application/json")
type RequestHeaders = {
  /** 请求体内容类型,默认值 "application/json" */
  Content-Type: string
}
{
  "Content-Type": "application/json"
}

Body

NameData TypeRequiredDescription
verifyTicketstringYesOTP 已验证工单(scene=login)
type RequestBody = {
  /** OTP 已验证工单(scene=login) */
  verifyTicket: string
}
{
  "verifyTicket": "otv_8a24de63b917c05f"
}

Response

Body

NameData TypeRequiredDescription
statusstringYespending 未达标 / satisfied 已达标并签发会话
attemptTicketstringNo尝试工单;pending 时必返,后续因素验证继续携带
nextFactorsarrayNopending 时按配置仍可选的因素
sessionTokenstringNo会话令牌(不透明);satisfied 时返回
refreshTokenstringNo刷新令牌;satisfied 时返回
sessionIdstringNo会话 ID;satisfied 时返回
expiresAtstringNo会话过期时间;satisfied 时返回
type LoginResultDTO = {
  /** pending 未达标 / satisfied 已达标并签发会话 */
  status: string
  /** 尝试工单;pending 时必返,后续因素验证继续携带 */
  attemptTicket?: string
  /** pending 时按配置仍可选的因素 */
  nextFactors?: string[]
  /** 会话令牌(不透明);satisfied 时返回 */
  sessionToken?: string
  /** 刷新令牌;satisfied 时返回 */
  refreshToken?: string
  /** 会话 ID;satisfied 时返回 */
  sessionId?: string
  /** 会话过期时间;satisfied 时返回 */
  expiresAt?: string
}
{
  "status": "pending",
  "attemptTicket": "atk_9f2c7be14d0a53e8",
  "nextFactors": [
    "otp",
    "mfa",
    "captcha"
  ]
}

HTTP Code

HTTP Status Meaning Notes
200 成功 OTP 因素计入尝试;达标即签发会话
403 账号被冻结 管理员已冻结该账号

Response Code

响应使用统一信封 {id, code, messages, result},其 code 字段:

code Meaning Notes
0 成功 返回登录结果
2002 账号被冻结 管理员已冻结该账号
2202 OTP 工单无效 工单无效、过期或用途不符

Examples

POST /api/v1/auth/login/otp
Content-Type: application/json

{
  "verifyTicket": "otv_8a24de63b917c05f"
}
{
  "id": "01JD8SH3Q8N5M9WY",
  "code": 0,
  "messages": [],
  "result": {
    "status": "satisfied",
    "sessionToken": "st_7c1f9e05b28d4a63",
    "refreshToken": "rt_46a9c7e015283d5b",
    "sessionId": "01JD8SEGVK6MZ7W3Q4RT5N8YB2",
    "expiresAt": "2026-11-13T08:00:00Z"
  }
}