- 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:
1 parent
4be569d978
commit
793848b06f
31 files changed
+4639
-333
No files matched your search
@@ -1246,6 +1246,14 @@ export const user = pgTable(
|
||||
* (见 routes/ranking.ts)。只管排名页和首页周榜,比赛排名不受它影响
|
||||
*/
|
||||
rankHiddenAt: timestamp("rank_hidden_at", { withTimezone: true, mode: "string" }),
|
||||
/**
|
||||
* 签进 access token 的版本号。改密码、重置密码、禁用账号时加一,这个人所有设备上
|
||||
* 签出去的 token 立刻作废(见 auth/session.ts 的 revokeUserSessions)。
|
||||
*
|
||||
* 放在库里而不是 Redis:机房和服务器共用这个库、各有各的 Redis,
|
||||
* 在一边改了密码,另一边登着的也得一起下线。
|
||||
*/
|
||||
tokenVersion: integer("token_version").default(0).notNull(),
|
||||
},
|
||||
(table) => [
|
||||
unique("user_username_key").on(table.username),
|
||||
|
||||
Reference in new issue
Block a user