fix: 应用 xhigh 代码评审的跨端修复
来自 xhigh code review 的正确性/健壮性修复,覆盖全部五端: - server:鉴权 fail-closed、计量交叉校验与配额扣穿处理、WS 网关并发与关闭顺序、 billing 行锁、redis Lua 过期与设备槽刷新、config 解析 - desktop:会话 epoch 防串话、WS 重连与 401 处理、api 客户端复用、统一 usePoll 轮询 - android:握手时序、请求头封装、账户状态派生、按需重组 - ios:finalize 宽限、串行采集、错误文案服务端优先、删除死代码 CommitController Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -131,8 +131,16 @@ func (h *Handlers) MobileLogin(c *gin.Context) {
|
||||
}
|
||||
|
||||
// Logout POST /v1/auth/logout(需登录)
|
||||
// 拉黑到 token 真实自然过期时间(中间件解析后存于 CtxExpires),确保即便
|
||||
// JWT_TTL_HOURS 配得很大,注销 token 也不会在固定窗口后复活(17B)。
|
||||
func (h *Handlers) Logout(c *gin.Context) {
|
||||
jti := c.GetString(CtxJTI)
|
||||
_ = h.JWT.Revoke(c, jti, time.Now().Add(8*24*time.Hour)) // 覆盖最长 TTL
|
||||
exp, _ := c.Get(CtxExpires)
|
||||
expiresAt, _ := exp.(time.Time)
|
||||
if expiresAt.IsZero() {
|
||||
// 兜底:claims 未带 exp(理论上不会发生),按当前配置 TTL 估一个上界。
|
||||
expiresAt = time.Now().Add(time.Duration(h.JWT.ttl))
|
||||
}
|
||||
_ = h.JWT.Revoke(c, jti, expiresAt)
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user