refactor: JWT 无状态认证替换为服务端 Session,修复记住我掉线问题
- 新增 internal/session 包:Session 结构体、Store 接口、MemoryStore(内存+后台清理)、RedisStore 预留 - Cookie 从 3 个精简为 1 个 mlb_sid(HttpOnly),移除 JWT access/refresh cookie - 会话过期采用滑动窗口:每次请求自动续期,记住我 30 天无操作过期 - AuthMiddleware/AuthAdmin/Maintenance 中间件改用 SessionManager.Validate() - AuthService Login/Register/ConfirmRestore 去除 token 生成,返回 *model.User - Controller 层在登录/注册后调用 SessionManager.Create 创建会话 - AdminService UpdateUserStatus/ResetUserToken 同步销毁 session 实现即时退登 - 改密/注销时通过 DestroyByUID 删除所有 session(替换 TokenVersion 检查) - config.yaml 新增 session 配置段(idle_timeout/remember_timeout/cleanup_interval) - TokenService/auth_parser/auth_token 标记废弃,移除 JWT 到期字段依赖
This commit is contained in:
12
config.yaml
12
config.yaml
@ -14,10 +14,14 @@ database:
|
||||
sslmode: disable
|
||||
|
||||
jwt:
|
||||
secret: "" # 生产环境通过 JWT_SECRET 环境变量或 .env 注入
|
||||
access_expire: 15 # 分钟
|
||||
refresh_expire: 168 # 小时 (7 天)
|
||||
remember_expire: 720 # 小时 (30 天)
|
||||
secret: "" # 生产环境通过 JWT_SECRET 环境变量或 .env 注入(若未来需复用 JWT)
|
||||
|
||||
# 会话配置(服务端 Session,替换 JWT 无状态认证)
|
||||
# 每次请求自动续期(滑动窗口),解决"记住我"掉线问题
|
||||
session:
|
||||
idle_timeout: 1440 # 不记住我:空闲超时(分钟),默认 1440 = 24 小时
|
||||
remember_timeout: 43200 # 记住我:空闲超时(分钟),默认 43200 = 30 天
|
||||
cleanup_interval: 300 # 后台清理过期会话间隔(秒),默认 300
|
||||
|
||||
bcrypt:
|
||||
cost: 12
|
||||
|
||||
Reference in New Issue
Block a user