认证 REST API
Manager 的公开认证接口统一位于 /api/auth/*。除下表注明的 WebView HTML 页面外,响应使用标准包络:
{
"success": true,
"code": 0,
"message": "",
"data": {}
}字段名使用 snake_case。业务拒绝(例如密码错误或凭据修改校验失败)通常仍是 HTTP 200,调用方必须 检查 success 与 code;没有有效登录会话的受保护请求返回 HTTP 401,并使用相同的响应结构。
当前接口
| 方法 | 路径 | 用途 |
|---|---|---|
POST | /api/auth/login | 用户名或邮箱 + 密码登录;包含 @ 时只走邮箱匹配 |
POST | /api/auth/logout | 退出当前浏览器会话,可重复调用 |
GET | /api/auth/me | 返回标准包络中的当前用户 DTO |
PATCH | /api/auth/credentials | 修改当前账户凭据 |
POST | /api/auth/register | 注册 |
POST | /api/auth/verify-email | 使用邮件中的一次性令牌完成邮箱验证 |
POST | /api/auth/resend-verification | 中性响应地重发验证邮件(匿名,任何输入都返回相同成功提示) |
POST | /api/auth/pending-verification/resend | 为本会话刚验证过密码的待验证账号重发验证邮件;无请求体,返回真实结果 |
POST | /api/auth/forgot-password | 中性响应地请求密码重置邮件 |
POST | /api/auth/reset-password | 使用一次性令牌设置新密码 |
POST | /api/auth/confirm-email-change | 确认当前账户的邮箱变更 |
POST | /api/auth/confirm-account-deletion | 确认账户删除并开始冷静期 |
GET | /api/auth/config | 返回公开注册、用户名与人机验证配置 |
GET | /api/auth/turnstile | 为原生移动端 WebView 返回 manager 同源的 Turnstile HTML 页面(不是 JSON 包络) |
GET | /api/auth/providers | 返回当前可用的第三方登录提供商 |
GET /api/auth/me 的 data 是 CurrentUserDto,包含可选用户标识、名称、头像、邮箱、访问级别和 可选目标连接等当前会话字段;未登录时应按 HTTP 401 和标准包络处理,不能解析历史模板响应。
POST /api/auth/login 的 data 是 LoginOutcomeDto。除既有字段外,当账号密码正确但尚未 完成邮箱验证时返回 code = 35(EMAIL_NOT_VERIFIED),并带上 email_masked(掩码邮箱, 例如 a***@ex****.com)。开源单实例信令服务器不存在该账号状态,该字段恒为 null;客户端也 必须容忍字段完全缺失。此时服务端还会给该浏览器会话签发一份最长 24 小时有效的重发授权(随会话保存,每次使用续期;会话空闲超时更短时以较短者为准)。
POST /api/auth/pending-verification/resend 不接受请求体,仅凭上述会话授权判定:
- 成功:
success = true,data.retry_after_sec为null。 - 命中节流:
code = 32(TOO_MANY_ATTEMPTS),data.retry_after_sec是该维度剩余秒数; 当管理员把某项日额度配置为0(等于禁止发送)时没有可等待的窗口,该字段为null, 客户端必须按“无倒计时”文案渲染。被拒绝的请求不消耗任何额度。 - 会话没有有效授权(未登录、已退出、账号已激活或进入删除流程):
code = 3(PERMISSION_ERROR),响应不含任何账号信息。
发送邮件的接口(注册、重发验证、忘记密码、邮箱变更、注销确认,以及 /api/oauth/registration/{submit,resend,fix-email})按发起该请求的语言撰写 正文:先看共享的 lrdm_locale cookie(用户显式切换过界面语言时才会写入),再看 Accept-Language,都无法识别时回退英文。验证邮件是异步投递的,语言在入队时就随记录 一并保存,因此不会受投递时机或投递实例影响;请求之后再切换界面语言也不会改写已排队的邮件。
修改凭据通过 PATCH /api/auth/credentials 提交必填的 current_username、current_password,以及 可选的 new_username、new_password;调用方只使用上表列出的当前路径。 第三方 OAuth 发起、回调和身份绑定仍属于 /api/oauth/*。