服务端一直签 access(30 分钟)和 refresh(14 天)两个令牌,但两个客户端拿到 401 都是直接清 令牌跳登录页,refresh 从来没被用过——"14 天有效"只是纸面参数,真实寿命就是 30 分钟。 - web/client.ts:请求前剩不到 90 秒先换;撞 401 先换再重放一次原请求;并发共用一次刷新; 上传附件同一条路 - android/Api.kt:call 拆 call/callOnce,2002 时用 Mutex 串行刷新后重放 - 后端 /auth/refresh 看一眼账号状态:停用的账号不能靠 refresh 一直续(2012) - 新增 session-refresh.mjs:假 access + 真 refresh 要能留住人,两个都假才回登录页
This commit is contained in:
+8
-1
@@ -56,6 +56,10 @@
|
||||
`Authorization: Bearer <access_token>`。`access` 30 分钟,`refresh` 14 天。
|
||||
`refresh_token` 只能用于 `/auth/refresh`(服务端校验 `typ`)。
|
||||
|
||||
**客户端要自己续期,别等用户被踢出去**:access 剩不到 90 秒就先换一对,
|
||||
撞上 `401/2002` 也先用 refresh 换一对、把原请求重放一次,换不动才清令牌回登录页。
|
||||
每次 `/auth/refresh` 都会返回新的 refresh,所以只要 14 天内用过一次,登录态就一直往后顺延。
|
||||
|
||||
### 0.4 幂等
|
||||
|
||||
所有 `POST/PATCH/DELETE` 都可带 `Idempotency-Key: <uuid>`。
|
||||
@@ -146,7 +150,10 @@
|
||||
{ "refresh_token": "…" }
|
||||
```
|
||||
|
||||
返回同形状的 `tokens`。无状态 JWT,**服务端不维护黑名单**——token 泄露只能等过期,这是 M0 已知取舍。
|
||||
返回同形状的 `tokens`(**扁平**,没有 `tokens` 信封)。无状态 JWT,**服务端不维护黑名单**——
|
||||
token 泄露只能等过期,这是 M0 已知取舍;换来的是刷新不需要查库。
|
||||
|
||||
换的时候会看一眼账号状态:账号被停用 → `2012`(403),停用的人不能靠 refresh 一直续下去。
|
||||
|
||||
### `POST /auth/login/password`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user