账户
auth/token、me、密码设置与关闭
路径未版本化
最后更新:2026-10-25
账户接口
POST /api/auth/token
认证:是(通常用网页 Cookie)。班级:否。用途:用网页会话换取跨端令牌。
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
ttlSec | body | number | 否 | 有效期秒数;正整数生效,否则使用默认 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 | 平台权限等级、名称和数字等级 |
via | cookie 或 token |
platform | Cookie 会话为 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
认证:是。班级:否。用途:修改自己的姓名、性别、宿舍号;学号、班级、权限、审核状态不可自行修改。
| 参数 | 类型 | 说明 |
|---|---|---|
name | string | 2–20 位中文或字母,可带姓名间隔号「·」;不能为空 |
gender | string | 只接受「男」「女」或空字符串 |
dorm | string | 最多 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
认证:是。班级:否。用途:首次设置或修改密码。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
current | string | 已设置过密码时必填 | 当前密码 |
next | string | 是 | 新密码:6–64 位,不能全是数字、不能是同一字符重复、不能是常见弱密码 |
成功返回 {"hasPassword":true}。已设置过密码时 current 不正确、next 与旧密码相同都会返回 400。成功后服务端会清除“必须改密码”标记和密码错误锁定。
POST /api/me/password/clear
认证:是。班级:否。用途:关闭密码登入,改走微信/Passkey/其他已绑定身份。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
current | string | 已设置密码时必填 | 当前密码;用于防止别人趁未锁屏关闭密码 |
成功返回 {"hasPassword":false}。如果账号没有可用的其他登入方式(已配置且启用的微信、Passkey 或其他平台身份),会返回 400 BAD_REQUEST,避免把账号锁死。已经处于无密码状态时,只要通过上述资质检查,同样返回成功。