- 新增 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 到期字段依赖
60 lines
2.0 KiB
YAML
60 lines
2.0 KiB
YAML
# MetaZone.FAN 默认配置
|
||
# 敏感值通过环境变量或 .env 覆盖
|
||
|
||
server:
|
||
port: 8080
|
||
mode: debug # debug | release | test
|
||
|
||
database:
|
||
host: 127.0.0.1
|
||
port: 5432
|
||
user: metazone
|
||
password: "" # 敏感值由 .env 注入
|
||
dbname: metalab_dev
|
||
sslmode: disable
|
||
|
||
jwt:
|
||
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
|
||
|
||
# 站点设置(运行时通过管理后台 /admin/site-settings 配置,DB持久化+内存缓存,无需重启)
|
||
# site.framework 页脚附加标识,默认 "Framework: MetaZone",留空则隐藏
|
||
# site.copyright_start 版权起始年,默认 "2024"
|
||
# registration.enabled 是否允许新用户注册,默认 true
|
||
# audit.* 审核系统配置,可运行时覆盖本文件默认值
|
||
audit:
|
||
enabled: true # 审核总开关
|
||
username_audit: true # 用户名修改审核
|
||
avatar_audit: true # 头像修改审核
|
||
bio_audit: true # 个性签名审核
|
||
|
||
# 角色配置(可扩展,无需修改源代码)
|
||
roles:
|
||
# 角色层级(数字越大权限越高)
|
||
levels:
|
||
user: 0
|
||
moderator: 1
|
||
admin: 2
|
||
owner: 3
|
||
# 角色显示名称
|
||
names:
|
||
user: "普通用户"
|
||
moderator: "版主"
|
||
admin: "管理员"
|
||
owner: "站长"
|
||
# 角色权限规则
|
||
permissions:
|
||
# 可操作的目标角色(未在此列出的角色默认可操作所有角色)
|
||
operable_roles:
|
||
admin: ["user"]
|
||
moderator: ["user"]
|