| HTTP状态码 | error | errorMessage(建议默认文案) | 适用端点 |
|---|---|---|---|
| 400 | CaptchaActionMismatch |
人机验证动作不匹配,请重新验证 | 所有受人机验证保护的端点 |
| 400 | CaptchaExpired |
人机验证已过期,请重新验证 | 所有受人机验证保护的端点 |
| 400 | CaptchaInvalid |
人机验证失败,请重试 | 所有受人机验证保护的端点 |
| 400 | CaptchaMissing |
该操作需要人机验证,请完成验证 | 所有受人机验证保护的端点 |
| 400 | EmailCodeExpired |
邮箱验证码已过期,请重新获取 | POST /user/change-password、PUT /user/email |
| 400 | EmailMismatch |
邮箱与发验证码时不一致 | PUT /user/email、POST /email/code/set-email |
| 302 | IdTokenInvalid |
登录凭证校验失败,请重试 | GET /user/oidc/{providerId}/callback |
| 400 | InvalidDisplayName |
显示名称格式不正确 | POST /user/register |
| 400 | InvalidEmail |
邮箱格式不正确 | POST /user/register、POST /email/code/* |
| 400 | InvalidEmailCode |
邮箱验证码错误 | POST /user/register、POST /user/change-password、PUT /user/email |
| 400 | InvalidRequest |
请求格式错误,请检查参数 | 所有端点 |
| 400 | LastLoginMethod |
这是唯一的登录方式,不可解绑,请先绑定邮箱或其他 OIDC 提供商 | DELETE /user/oidc/{providerId} |
| 302 | ProviderDenied |
用户取消了授权 | GET /user/oidc/{providerId}/callback |
| 400 | SamePassword |
新密码不能与旧密码相同 | POST /user/change-password |
| 302 | StateMismatch |
安全校验失败,请重试 | GET /user/oidc/{providerId}/callback |
| 302 | TokenExchangeFailed |
登录失败,请重试 | GET /user/oidc/{providerId}/callback |
| 400 | WeakPassword |
密码强度不足,需包含字母和数字且不少于6位 | POST /user/register、POST /user/change-password |
| 401 | InvalidCredentials |
邮箱或密码错误(或邮箱或验证码错误) | POST /user/login |
| 401 | Unauthorized |
请先登录 | 所有需要 Cookie 身份验证的端点 |
| 403 | CaptchaRequired |
本次操作需要人机验证,请完成挑战 | onDemand 模式下触发的端点 |
| 403 | CaptchaScoreTooLow |
人机验证评分不足,请重试 | 评分型 provider 的端点(预留) |
| 403 | Forbidden |
无权执行此操作 | 所有需要特定角色的端点(含管理后台入口) |
| 403 | InvalidOldPassword |
旧密码错误 | POST /user/change-password |
| 403 | LoginLocked |
登录失败次数过多,请稍后再试 | POST /user/login |
| 403 | OidcDisabled |
OIDC 功能未启用 | GET /user/oidc/{providerId}/authorize、GET /user/oidc/{providerId}/bind |
| 403 | UserBanned |
该账号已被封禁 | POST /user/login、GET /user/oidc/{providerId}/callback |
| 404 | EmailNotRegistered |
该邮箱未注册 | POST /email/code/login |
| 404 | ProviderNotFound |
不支持该 OIDC 提供商 | GET /user/oidc/{providerId}/* |
| 404 | ProviderNotBound |
未绑定该 OIDC 提供商 | DELETE /user/oidc/{providerId} |
| 404 | UserNotFound |
用户不存在 | GET /admin/users/{userId}、POST /admin/bans/{userId}、POST /admin/session-revocations/{userId}、POST /admin/role-grants/{userId} |
| 404 | BanNotFound |
未找到该用户的封禁记录 | GET /admin/bans/{userId}、DELETE /admin/bans/{userId} |
| 409 | BanAlreadyExists |
该用户已有生效中的封禁记录 | POST /admin/bans/{userId} |
| 409 | EmailAlreadyRegistered |
该邮箱已被注册 | POST /user/register、POST /email/code/register、PUT /user/email |
| 409 | ProviderAlreadyBound |
该账号已绑定其他用户 | GET /user/oidc/{providerId}/callback(bind 场景) |
| 429 | EmailCodeRateLimited |
验证码发送过于频繁,请稍后再试 | POST /email/code/* |
| 429 | RateLimited |
操作过于频繁,请稍后再试 | 所有端点(通用限流) |
| 500 | InternalError |
服务器内部错误,请稍后重试 | 所有端点 |
| 503 | CaptchaServiceUnavailable |
人机验证服务暂不可用,请稍后重试 | 所有受人机验证保护的端点 |
标注为
302的 OIDC callback 错误并非 JSON 错误体,而是以302重定向跳转至前端回调页,并在 URL 查询参数中携带status=error、error(错误码)与errorMessage(URL 编码的人类可读描述)。详见 GET /user/oidc/{providerId}/callback。