feat: 添加JWT登录鉴权和用户管理功能
- 后端功能: - 实现JWT登录鉴权,token有效期7天,超过1天自动刷新 - 添加用户管理功能,支持创建、删除、修改密码 - 首次创建的用户为默认账户,拥有管理权限 - 实现密码重置功能,支持重置密钥和频率限制(1分钟最多3次) - 所有API接口需要JWT鉴权 - WebSocket连接需要JWT鉴权,绑定用户身份 - 前端功能: - 添加登录页面和密码重置页面 - 添加用户管理页面,默认账户可管理所有用户,普通用户只能查看和修改自己 - 添加退出登录功能,带二次确认 - 未登录时不建立WebSocket连接 - API请求自动携带JWT token,认证失败自动跳转登录页 - 安全特性: - 密码使用BCrypt加密存储 - 重置密码错误信息统一处理,避免信息泄露 - 用户操作严格绑定JWT,防止数据篡改和越权
This commit is contained in:
@@ -56,3 +56,19 @@ copy.trading.polling.enabled=${COPY_TRADING_POLLING_ENABLED:true}
|
||||
# WebSocket 配置
|
||||
websocket.heartbeat-timeout=${WEBSOCKET_HEARTBEAT_TIMEOUT:60000}
|
||||
|
||||
# JWT配置
|
||||
jwt.secret=${JWT_SECRET:your-secret-key-change-in-production}
|
||||
# 7天(毫秒)
|
||||
jwt.expiration=604800000
|
||||
# 1天(毫秒),超过此时间但未过期时自动刷新
|
||||
jwt.refresh-threshold=86400000
|
||||
|
||||
# 密码重置配置
|
||||
admin.reset-password.key=${ADMIN_RESET_PASSWORD_KEY:change-me-in-production}
|
||||
|
||||
# 频率限制配置
|
||||
# 1分钟内最多3次
|
||||
rate-limit.reset-password.max-attempts=3
|
||||
# 时间窗口(秒)
|
||||
rate-limit.reset-password.window-seconds=60
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- 创建用户表(用于JWT登录鉴权)
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名(唯一)',
|
||||
password VARCHAR(255) NOT NULL COMMENT '密码(BCrypt加密)',
|
||||
created_at BIGINT NOT NULL COMMENT '创建时间(毫秒时间戳)',
|
||||
updated_at BIGINT NOT NULL COMMENT '更新时间(毫秒时间戳)',
|
||||
INDEX idx_username (username)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表(JWT登录鉴权)';
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- 添加 is_default 字段到 users 表
|
||||
ALTER TABLE users
|
||||
ADD COLUMN is_default BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否默认账户(首次创建的用户)';
|
||||
|
||||
-- 为默认账户添加索引
|
||||
ALTER TABLE users
|
||||
ADD INDEX idx_is_default (is_default);
|
||||
|
||||
Reference in New Issue
Block a user