refactor(登录): 登录态从 Cookie 换成 access token + refresh token
Deploy / deploy (push) Canceled after 0s

- access token 是 15 分钟的 JWT,走 Authorization: Bearer;refresh token 7 天,每次换都轮换
- 退出登录、改密码、禁用账号仍然立刻生效:每个请求核对 Redis 会话和库里新加的 user.token_version
- 在服务器后台改密码 / 禁用,机房那边登着的也会一起下线(原来两边 Redis 分开,管不到)
- WebSocket 握手借子协议带 token;JWT 密钥存在本站 Redis,部署不用加配置
- 去掉 COOKIE_SECURE;上线后所有人要重新登录一次

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-20 19:22:52 +08:00
1 parent 4be569d978
commit 793848b06f
31 files changed
+4639 -333

No files matched your search

+7 -1
View File
@@ -1,12 +1,18 @@
import axios from "axios"
import { createDiscreteApi } from "naive-ui"
import { getAccessToken } from "./auth"
// 指向新后端的 /api/admin。响应是 zip 二进制,不走 { error, data } 信封,
// 所以不能复用 utils/api 的拦截器(它会把 response.data.data 取出来)。
const http = axios.create({
baseURL: "/api/admin",
responseType: "blob",
withCredentials: true,
})
http.interceptors.request.use(async (config) => {
const token = await getAccessToken()
if (token) config.headers.set("Authorization", `Bearer ${token}`)
return config
})
// 脱离 n-message-provider 也能弹,理由同 utils/api.ts