-- 会话 + 设备元数据(设备 & 会话管理 P2) -- -- ① sessions:每次登录一条,绑定 device + refresh-token JTI,支撑「按设备强制退出 / -- 最后登录时间 / 会话历史」。refresh 轮换更新 refresh_jti+last_active;登出/强制退出 -- 置 revoked_at。Redis 白名单仍作快速校验,sessions 是可查询的权威记录。 -- ② devices.client_version:该设备最近上报的客户端版本(列表展示)。 -- ③ devices.totp_trusted_until:预留——未来 2FA「信任设备」过期点;清除登录信息时清空。 -- -- 注:devices 唯一键 UNIQUE(uuid)→UNIQUE(user_id,uuid) 与 platform CHECK 加 linux 需 -- SQLite 表重建,风险隔离到单独迁移,不在本迁移内做。 CREATE TABLE sessions ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, device_id INTEGER NOT NULL, refresh_jti TEXT NOT NULL UNIQUE, client_ip TEXT NULL, client_version TEXT NULL, created_at DATETIME NOT NULL, last_active DATETIME NULL, revoked_at DATETIME NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE ); CREATE INDEX idx_sessions_user ON sessions (user_id); CREATE INDEX idx_sessions_device ON sessions (device_id); ALTER TABLE devices ADD COLUMN client_version TEXT NULL; ALTER TABLE devices ADD COLUMN totp_trusted_until DATETIME NULL;