feat: 添加JWT登录鉴权和用户管理功能

- 后端功能:
  - 实现JWT登录鉴权,token有效期7天,超过1天自动刷新
  - 添加用户管理功能,支持创建、删除、修改密码
  - 首次创建的用户为默认账户,拥有管理权限
  - 实现密码重置功能,支持重置密钥和频率限制(1分钟最多3次)
  - 所有API接口需要JWT鉴权
  - WebSocket连接需要JWT鉴权,绑定用户身份

- 前端功能:
  - 添加登录页面和密码重置页面
  - 添加用户管理页面,默认账户可管理所有用户,普通用户只能查看和修改自己
  - 添加退出登录功能,带二次确认
  - 未登录时不建立WebSocket连接
  - API请求自动携带JWT token,认证失败自动跳转登录页

- 安全特性:
  - 密码使用BCrypt加密存储
  - 重置密码错误信息统一处理,避免信息泄露
  - 用户操作严格绑定JWT,防止数据篡改和越权
This commit is contained in:
WrBug
2025-12-03 00:24:46 +08:00
parent f1c9b34488
commit dd553ae160
30 changed files with 2402 additions and 47 deletions
+34
View File
@@ -0,0 +1,34 @@
/**
* Token 管理工具
*/
const TOKEN_KEY = 'jwt_token'
/**
* 获取 token
*/
export const getToken = (): string | null => {
return localStorage.getItem(TOKEN_KEY)
}
/**
* 保存 token
*/
export const setToken = (token: string): void => {
localStorage.setItem(TOKEN_KEY, token)
}
/**
* 清除 token
*/
export const removeToken = (): void => {
localStorage.removeItem(TOKEN_KEY)
}
/**
* 检查是否有 token
*/
export const hasToken = (): boolean => {
return getToken() !== null
}
+8
View File
@@ -37,3 +37,11 @@ export {
isValidPrivateKey
} from './ethers'
// 统一导出 auth 相关工具函数
export {
getToken,
setToken,
removeToken,
hasToken
} from './auth'