账户

auth/token、me、密码设置与关闭

路径未版本化 最后更新:2026-10-25

账户接口

POST /api/auth/token

认证:是(通常用网页 Cookie)。班级:否。用途:用网页会话换取跨端令牌。

参数位置类型必填说明
ttlSecbodynumber否有效期秒数;正整数生效,否则使用默认 30 天
{
  "ok": true,
  "data": {
    "token": "<base64url-payload>.<base64url-signature>",
    "expiresIn": 86400,
    "user": {
      "id": 12, "username": "20260001", "name": "示例同学",
      "className": null, "gender": null, "dorm": null,
      "adminLevel": 0, "levelName": "同学"
    }
  }
}

未登入时返回 401。令牌不存库,无法单独吊销;泄漏后只能等过期或轮换 SESSION_SECRET。

GET /api/me

认证:是。班级:可选(?class= 会改变班级字段)。用途:当前用户、身份来源和班级上下文。

字段说明
id / username / name用户 id、学号、姓名
className本次请求班级上下文的班级名;没有班级时为 null(不是用户资料里的班级文字)
gender / dorm性别、宿舍号,可能为 null
adminLevel / levelName / level平台权限等级、名称和数字等级
viacookie 或 token
platformCookie 会话为 web;令牌方式为签发时的平台 id
classId / classRole / classSlug本次请求的班级 id、班内角色(student/committee/admin)、slug;无班级为 null
classes当前班级数组,最多 1 个元素:{id, slug, name, role};无班级为空数组
identities已绑定平台:{platform, platformName, uid, boundAt};uid 只返回前 8 位(超出部分以省略号代替)
{
  "ok": true,
  "data": {
    "id": 12, "username": "20260001", "name": "示例同学",
    "className": "示例班级", "gender": null, "dorm": "5B607",
    "adminLevel": 0, "levelName": "同学", "level": 1,
    "via": "cookie", "platform": "web",
    "classId": 3, "classRole": "student", "classSlug": "demo-class",
    "classes": [{ "id": 3, "slug": "demo-class", "name": "示例班级", "role": "student" }],
    "identities": []
  }
}

这里的 className 是本次请求班级上下文的班级名;未加入班级或 ?class= 无结果时为 null。

POST /api/me

认证:是。班级:否。用途:修改自己的姓名、性别、宿舍号;学号、班级、权限、审核状态不可自行修改。

参数类型说明
namestring2–20 位中文或字母,可带姓名间隔号「·」;不能为空
genderstring只接受「男」「女」或空字符串
dormstring最多 16 位数字、字母或短横线,例如 5B607;空字符串表示清空

返回更新后的资料对象,字段包括:id、username、name、className、gender、dorm、adminLevel、status、lastLogin、createdAt、hasPassword、passwordSetAt、lockedUntil、hasWechat、wechatNickname、readOnlyFields。

curl -s -X POST "$BASE/api/me" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"示例同学","gender":"男","dorm":"5B607"}'

POST /api/me/password

认证:是。班级:否。用途:首次设置或修改密码。

参数类型必填说明
currentstring已设置过密码时必填当前密码
nextstring是新密码:6–64 位,不能全是数字、不能是同一字符重复、不能是常见弱密码

成功返回 {"hasPassword":true}。已设置过密码时 current 不正确、next 与旧密码相同都会返回 400。成功后服务端会清除“必须改密码”标记和密码错误锁定。

POST /api/me/password/clear

认证:是。班级:否。用途:关闭密码登入,改走微信/Passkey/其他已绑定身份。

参数类型必填说明
currentstring已设置密码时必填当前密码;用于防止别人趁未锁屏关闭密码

成功返回 {"hasPassword":false}。如果账号没有可用的其他登入方式(已配置且启用的微信、Passkey 或其他平台身份),会返回 400 BAD_REQUEST,避免把账号锁死。已经处于无密码状态时,只要通过上述资质检查,同样返回成功。

若本文与源码不一致,以源码和实际响应为准;发现不一致时请更新文档,而不是修改 API 行为。 学生使用指南 · 返回 API 总览