|
|
0e6230612c
|
🐛 加强文件名解码的空值处理
- 后端decodeHtmlEntities添加空字符串默认值
- 前端decodeHtmlEntities非字符串时返回空字符串
- getFileDisplayName增强类型检查
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 14:56:26 +08:00 |
|
|
|
dd97328b2f
|
✨ 前端添加HTML实体解码兜底
- 添加decodeHtmlEntities方法解码文件名
- 添加getFileDisplayName统一获取显示名称
- 确保文件名正确显示,即使后端未解码
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 14:04:50 +08:00 |
|
|
|
1581da1e3e
|
🐛 优化弹窗被拦截时的处理方式
- 弹窗被阻止时改为toast提示,避免当前页跳转
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 13:12:41 +08:00 |
|
|
|
4fe59aa27c
|
🐛 修复分享链接打开方式
- 添加openShare方法替代直接调用window.open
- 处理弹窗被浏览器阻止的情况,自动退回当前页跳转
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 13:04:11 +08:00 |
|
|
|
2b25f18137
|
✨ 重新设计分享管理页面
- 添加搜索/筛选功能(关键字、类型、状态、排序)
- 重新设计卡片视图,展示更多信息(状态、类型、加密、存储来源等)
- 添加filteredShares计算属性实现筛选和排序
- 添加辅助方法:getShareTypeLabel、getShareStatus、getShareProtection等
- 优化分享卡片样式,支持深色/浅色主题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 12:57:35 +08:00 |
|
|
|
7d5a230007
|
✨ 优化监控页面加载体验
- 添加monitorTabLoading整体加载遮罩
- 创建openMonitorTab()和initMonitorTab()方法
- 使用Promise.all并行加载健康检测和系统日志
- 数据全部加载完成后才显示监控内容,彻底解决刷新闪烁问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 12:00:43 +08:00 |
|
|
|
21ceff64f8
|
🐛 优化监控页面初始状态设置
- 将adminTab计算提取为initialAdminTab变量
- healthCheck.loading和systemLogs.loading根据initialAdminTab设置初始值
- 确保data()执行时所有状态一致,避免刷新闪烁
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 11:50:59 +08:00 |
|
|
|
702cf6e9b4
|
🐛 修复监控页面loading状态 - 在mounted中提前设置
- 将healthCheck.loading和systemLogs.loading初始值改回false
- 在mounted中、checkLoginStatus之前,判断adminTab并设置loading
- 确保在appReady变为true之前loading状态已正确设置
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 11:28:18 +08:00 |
|
|
|
3b8714c93c
|
🐛 修复监控页面刷新时显示"没有数据"的闪烁
- 当adminTab为monitor时,healthCheck和systemLogs的loading初始值设为true
- 这样在数据加载完成前显示"加载中"而不是"没有数据"
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 11:19:19 +08:00 |
|
|
|
af15781154
|
🐛 修复管理员标签页刷新时的UI闪烁
- adminTab初始值直接从localStorage读取,而非在checkLoginStatus中恢复
- 这样Vue初始化时就已经是正确的标签页,避免先显示概览再切换的闪烁
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 11:11:20 +08:00 |
|
|
|
c4d3c15403
|
🐛 修复页面刷新时UI闪烁问题
- 添加appReady状态控制应用显示时机
- 在checkLoginStatus完成后才显示主界面
- 添加加载占位符动画(云图标脉冲效果)
- 使用v-if/v-else确保UI状态一致性
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 11:07:07 +08:00 |
|
|
|
9f0f8f69af
|
✨ 添加管理员标签页持久化功能
- 刷新页面后管理员标签页保持不变(概览/设置/监控/用户/工具)
- 使用localStorage存储当前标签页状态
- 登出时自动清理保存的标签页状态
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 11:03:55 +08:00 |
|
|
|
962b01d05a
|
security: refreshToken 也存储在 HttpOnly Cookie 中
## 后端修改
- 登录时同时设置 token 和 refreshToken 的 HttpOnly Cookie
- refreshToken 有效期7天,token 有效期2小时
- 刷新接口优先从 Cookie 读取 refreshToken(向后兼容请求体)
- 登出时同时清除两个 Cookie
## 前端修改
- 移除 refreshToken 变量和相关逻辑
- 简化 doRefreshToken(),不再手动传递 refreshToken
- 简化 tryRefreshOrLogout(),直接尝试刷新
## 好处
- 页面刷新后 refreshToken 不会丢失
- 完全无感刷新,用户体验更好
- 前端代码更简洁(减少约20行)
- refreshToken 也无法被 XSS 窃取
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 10:38:40 +08:00 |
|
|
|
d05e3a22f1
|
security: 实施 HttpOnly Cookie 鉴权方案
## 后端修改
- 新增 /api/logout 接口清除认证 Cookie
## 前端修改
- 移除 localStorage 存储 token/refreshToken(防止 XSS 窃取)
- 移除所有手动 Authorization 头(共36处)
- checkLoginStatus 改为直接调用 API 验证(Cookie 自动携带)
- logout 改为调用后端接口清除 Cookie
- 简化 token 刷新逻辑
## 安全性提升
- Token 从 localStorage 迁移到 HttpOnly Cookie
- XSS 攻击无法通过 JS 读取 token
- 配合 SameSite 属性防御 CSRF 攻击
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 10:33:27 +08:00 |
|
|
|
d1c5b0c1bf
|
fix: 修复移动端文件列表滑动问题
- 移除 touchstart 中的 event.preventDefault(),不再阻止默认滚动
- 添加 handleLongPressMove 方法检测手指移动
- 滑动超过 10px 时自动取消长按,允许正常滚动
- 为 grid 和 list 视图的文件项添加 @touchmove 事件
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-30 10:12:46 +08:00 |
|
|
|
4f1a1ec97c
|
fix: 修复验证码请求429错误
问题:
- 短时间内多次请求验证码触发限流(429 Too Many Requests)
修复:
- 后端:验证码最小请求间隔从3秒改为1秒
- 前端:添加2秒防抖,避免重复请求
- 前端:429错误时保留已有验证码图片
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 14:06:23 +08:00 |
|
|
|
9d36063e09
|
fix: 修复验证码session不一致的问题
问题原因:
- 验证码图片通过<img src>加载,可能不携带session cookie
- 导致验证码生成和表单提交使用不同的session
修复方案:
- 改用axios请求获取验证码(blob格式)
- 确保验证码请求携带withCredentials
- 点击"忘记密码"时立即加载验证码
- 切换到注册模式时立即加载验证码
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 13:50:06 +08:00 |
|
|
|
540c292d70
|
feat: 实现Token刷新机制,缩短登录有效期
安全改进:
- Access Token有效期从7天缩短为2小时
- 添加Refresh Token机制(有效期7天)
- 关闭浏览器后较快失效,提升安全性
后端修改(auth.js):
- 添加generateRefreshToken函数生成刷新令牌
- 添加refreshAccessToken函数验证并刷新access token
- 分离ACCESS_TOKEN_EXPIRES和REFRESH_TOKEN_EXPIRES配置
后端修改(server.js):
- 登录时返回refreshToken和expiresIn
- 添加/api/refresh-token接口用于刷新token
- Cookie有效期同步调整为2小时
前端修改(app.js):
- 保存refreshToken到localStorage
- 添加自动刷新定时器(过期前5分钟刷新)
- 页面加载时若token过期自动尝试刷新
- 登出时清除refreshToken和定时器
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 13:46:51 +08:00 |
|
|
|
1d65e97b04
|
feat: 注册、重置密码、重发验证邮件添加验证码功能
后端修改:
- 添加通用验证码验证函数 verifyCaptcha()
- /api/register 接口添加验证码验证
- /api/password/forgot 接口添加验证码验证
- /api/resend-verification 接口添加验证码验证
前端修改:
- 注册表单添加验证码输入框和图片
- 忘记密码模态框添加验证码
- 重发验证邮件区域添加验证码输入
- 添加各表单的验证码刷新方法
- 提交失败后自动刷新验证码
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 13:11:03 +08:00 |
|
|
|
4aaf6765eb
|
✨ 首页和登录页支持全局主题
- index.html 添加亮色主题 CSS 变量和样式
- index.html 添加 JS 自动加载全局主题
- app.js 修改 initTheme,未登录时从公开 API 获取全局主题
- 登录页面现在会跟随管理员设置的全局主题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-28 00:00:53 +08:00 |
|
|
|
64268135aa
|
🔧 改进全局主题设置提示信息
当管理员设置了个人偏好时,提示"你设置了个人偏好,不受全局影响"
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:49:06 +08:00 |
|
|
|
551646244e
|
🔧 添加全局主题设置调试日志
添加console.log帮助诊断全局主题设置不生效的问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:45:31 +08:00 |
|
|
|
f12b9b7291
|
✨ 添加主题切换功能:支持暗色/亮色玻璃主题
功能说明:
- 管理员可在系统设置中配置全局默认主题
- 普通用户可在设置页面选择:跟随全局/暗色/亮色
- 分享页面自动继承分享者的主题偏好
- 主题设置实时保存,刷新后保持
技术实现:
- 后端:数据库添加theme_preference字段,新增主题API
- 前端:CSS变量实现主题切换,localStorage缓存避免闪烁
- 分享页:加载时获取分享者主题设置
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 23:02:48 +08:00 |
|
|
|
4f29bbe631
|
feat(admin): 管理员页面改为标签页模式
- 添加5个标签页:概览、设置、监控、用户、工具
- 概览:调试模式开关、服务器存储统计
- 设置:系统设置、SMTP邮件配置
- 监控:健康检测、系统日志
- 用户:用户管理列表
- 工具:上传工具管理
优化管理员页面布局,减少滚动,提升使用体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:31:26 +08:00 |
|
|
|
c3bc58a88b
|
feat(admin): 添加系统日志功能
## 新功能
1. **系统日志数据库**
- 新增 system_logs 表
- 支持日志级别:debug/info/warn/error
- 支持日志分类:auth/user/file/share/system/security
- 记录用户ID、用户名、IP地址、User-Agent
2. **日志记录**
- 用户注册成功/失败
- 用户登录成功/失败(密码错误)
- 系统操作(日志清理等)
3. **管理员API**
- GET /api/admin/logs - 查询日志(支持分页和筛选)
- GET /api/admin/logs/stats - 获取日志统计
- POST /api/admin/logs/cleanup - 清理旧日志
4. **前端界面**
- 日志列表展示(时间、级别、分类、内容、用户、IP)
- 筛选功能(级别、分类、关键词搜索)
- 分页导航
- 清理旧日志功能
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 19:54:46 +08:00 |
|
|
|
1dde17bb04
|
feat(admin): 添加系统健康检测功能
新增管理员健康检测面板,可检测以下配置项:
- 安全配置:JWT密钥、CORS、HTTPS、管理员账号、登录防爆破
- 服务状态:SMTP邮件、数据库连接、存储目录
- 运行配置:反向代理支持、Node环境
修改文件:
- backend/auth.js: 新增 isJwtSecretSecure() 函数
- backend/server.js: 新增 /api/admin/health-check API
- frontend/app.js: 新增健康检测数据和方法
- frontend/app.html: 新增健康检测UI界面
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 19:37:42 +08:00 |
|
|
|
d2aa115b5b
|
fix: SFTP下载使用新窗口打开直链
- app.js downloadFile: SFTP有直链时用window.open新窗口打开
- share.html downloadFile: 分享页面同样处理
- 本地存储下载保持原有方式不变
- 解决HTTPS页面下载HTTP直链的Mixed Content问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 15:24:20 +08:00 |
|
|
|
482a610420
|
Revert "fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题"
This reverts commit a4c94b1f68.
|
2025-11-27 15:20:11 +08:00 |
|
|
|
a4c94b1f68
|
fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题
- downloadFile: 检测Mixed Content自动降级到后端代理下载
- getMediaUrl: 媒体预览同样处理Mixed Content
- 当HTTPS页面遇到HTTP直链时,自动使用服务器代理
- 添加Toast提示用户正在使用代理下载
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 14:59:09 +08:00 |
|
|
|
ffed82a55c
|
fix: 修复token过期后仍显示已登录状态的问题
- 页面加载时先向服务器验证token是否有效
- 添加axios响应拦截器,任何API返回401时自动登出
- 新增handleTokenExpired方法统一处理token失效
- token失效时显示Toast提示用户重新登录
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 13:43:11 +08:00 |
|
|
|
4f9b281039
|
feat: 添加SFTP空间使用统计功能
- 新增 /api/user/sftp-usage API,递归统计SFTP服务器空间使用情况
- 返回总使用空间、文件数、文件夹数
- 在设置页面显示SFTP空间统计信息
- 支持手动刷新统计数据
- 适配"仅SFTP"和"用户可选"两种权限模式的UI
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 13:39:51 +08:00 |
|
|
|
86ed1f4040
|
🔧 优化大文件上传支持
前端改进:
- 添加axios上传请求30分钟超时配置
Nginx改进:
- 增加代理超时时间到30分钟(1800秒)
- 添加 proxy_request_buffering off 避免大文件缓存到磁盘
- 添加 proxy_buffering off 禁用响应缓冲
- 优化 client_body_buffer_size
修复 ERR_HTTP2_PING_FAILED / Network Error 问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:24:49 +08:00 |
|
|
|
3045c354f4
|
✨ 优化上传体验:上传前检查文件大小限制
问题:原来文件上传完成后才提示超过大小限制,浪费用户时间
修复:
- 后端:添加 /api/config 公开接口返回上传大小限制
- 前端:页面加载时获取配置
- 前端:uploadFile 函数开始时检查文件大小,超限立即提示
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 10:46:10 +08:00 |
|
|
|
76f4b772a9
|
🎨 修复通知和按钮显示问题
1. Toast通知改为只显示最新一条,避免多条同时出现
2. 修复首页"已有账号"按钮在渐变背景上看不清的问题
- 使用白色边框和文字
- 添加半透明背景和模糊效果
- 移动端也能清晰显示
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 10:27:14 +08:00 |
|
|
|
7b8b7afaf9
|
✨ 新增视图记忆功能,优化用户体验
功能新增:
- 自动记住用户上次停留的视图(文件/分享/设置/管理)
- 下次登录时恢复到上次的视图位置
- 登出时清理视图记录
安全优化:
- 新增 isViewAllowed() 方法,验证视图权限
- 防止普通用户越权访问管理后台
- 只记录合法且有权限的视图
代码优化:
- 简化登录后的视图跳转逻辑
- switchView() 支持 force 参数,用于强制刷新
- 统一视图切换和权限检查流程
用户体验提升:
- 减少重复导航,直达上次工作位置
- 管理员可以记住后台页面位置
- 更加智能和人性化
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 22:09:40 +08:00 |
|
|
|
600545d652
|
🐛 修复用户信息同步时机问题
前端修复:
- 在检测存储配置更新前,先同步完整的用户信息
- 确保 has_ftp_config 等字段及时更新
- 使用对象扩展运算符合并用户信息,避免覆盖现有字段
问题修复:
- 修复存储配置检测可能使用过期用户信息的问题
- 确保用户配置状态与服务器保持同步
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 21:07:08 +08:00 |
|
|
|
1c8eded07e
|
💄 优化存储配置提示逻辑
前端优化:
- 新增 profileInitialized 标志,避免首次加载时显示误导性提示
- 新增 suppressStorageToast 标志,用户主动切换后不显示配置同步提示
- 首次加载时只同步存储配置,不弹出提示
- 用户主动切换存储方式后,下一次配置同步不提示"管理员已修改"
用户体验改进:
- 避免用户刚登录就看到"管理员已更改存储方式"的误导提示
- 区分用户主动操作和管理员修改操作
- 减少不必要的提示干扰
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 20:59:20 +08:00 |
|
|
|
382aee8e61
|
💄 优化文件下载体验
前端优化:
- 统一文件下载逻辑,HTTP 和 SFTP 下载使用相同方式
- 移除 window.open 弹出新窗口的方式
- 统一使用隐藏的 <a> 标签触发下载
- 简化代码逻辑,提高可维护性
用户体验改进:
- 避免浏览器弹出窗口拦截
- 下载过程更加流畅
- 减少额外的页面跳转
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 20:51:14 +08:00 |
|
|
|
b4cba469aa
|
🐛 修复邮件验证链接兼容性问题
前端优化:
- 新增 getTokenFromUrl() 方法,支持解析不规范的 URL 参数
- 新增 sanitizeUrlToken() 方法,统一清理 URL 中的 token
- 兼容旧版邮件链接格式(缺少 ? 的情况)
- 优化 URL 参数提取逻辑,使用正则表达式兼容多种格式
- 改进代码复用性,减少重复代码
问题修复:
- 修复某些邮件客户端生成的链接无法正常解析 token 的问题
- 确保验证链接和重置链接在各种环境下都能正常工作
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 20:24:24 +08:00 |
|
|
|
4e4ef0405b
|
🔒 增强安全防护:防止 SSRF 攻击和 Token 泄露
后端安全增强:
- 新增 SSRF 防护机制,验证 SFTP 目标地址
- 添加 isPrivateIp() 函数,检测并阻止连接内网地址
- 添加 validateSftpDestination() 函数,验证主机名和端口
- 支持 DNS 解析和 IP 地址验证
- 添加 SFTP 连接超时配置(默认8秒)
- 移除 URL 参数中的 token 认证,只接受 Header 或 HttpOnly Cookie
前端安全改进:
- 移除下载链接中的 token 参数
- 改为依赖同域 Cookie 进行身份验证
- 避免 token 在 URL 中暴露,防止日志泄露
环境变量配置:
- ALLOW_PRIVATE_SFTP=true 可允许连接内网(测试环境)
- SFTP_CONNECT_TIMEOUT 可配置连接超时时间
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 20:07:34 +08:00 |
|
|
|
19a6c70d42
|
✨ 优化 SFTP 配置流程和界面
前端优化:
- 重新设计 SFTP 配置引导弹窗,采用渐变色头部
- 新增独立的 SFTP 配置弹窗,支持导入 .inf 配置文件
- 移除 forceSftpConfigVisible 标志,改用弹窗方式
- 简化存储切换逻辑,提升用户体验
- 优化配置表单布局和提示文字
交互改进:
- 支持拖拽导入配置文件
- 优化配置流程,更加直观
- 改进错误提示和操作引导
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 19:30:00 +08:00 |
|
|
|
db520f931e
|
📝 重写 README 文档 & ✨ 优化前端功能
文档更新:
- 完全重写 README.md,更加详细和专业
- 添加一键部署命令(curl 和 wget 两种方式)
- 详细介绍双存储模式、邮件系统、安全防护等特性
- 添加完整的使用指南和常见问题解答
- 更新项目结构和技术栈说明
- 添加版本更新日志
前端优化:
- 优化存储管理界面交互
- 改进文件管理功能
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 19:21:39 +08:00 |
|
|
|
02f0f3aa24
|
🔥 移除旧密码重置审核系统 & ✨ 优化存储管理UI
后端改进:
- 移除需要管理员审核的密码重置请求功能
- 简化密码重置流程,直接使用邮件重置
- 删除 password_reset_requests 表及相关代码
前端优化:
- 重新设计存储管理界面,采用现代化渐变风格
- 改进存储方式切换交互,添加动画效果
- 优化视觉层次和信息展示
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 19:12:57 +08:00 |
|
|
|
cfbb134587
|
🐛 修复邮箱验证和密码重置的时间戳问题
后端修复:
- 修改时间戳存储格式:从 ISO 字符串改为数值时间戳(毫秒)
- 优化时间戳比较逻辑:兼容新旧格式的时间戳
- 修复 VerificationDB.consumeVerificationToken() 的时间比较
- 修复 PasswordResetTokenDB.use() 的时间比较
- 统一使用 Date.now() 生成时间戳
前端改进:
- 新增 verifyMessage 独立显示验证相关提示
- 优化邮箱验证成功后的用户体验(自动切换到登录表单)
- 优化密码重置成功后的用户体验(自动切换到登录表单)
- 改进提示信息显示方式
技术细节:
- SQLite 时间比较:strftime('%s','now')*1000 获取当前毫秒时间戳
- 兼容旧数据:同时支持字符串和数值时间戳比较
这个修复解决了邮箱验证令牌一直提示过期的问题。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 15:48:32 +08:00 |
|
|
|
6958655d6e
|
✉️ 添加完整的邮件系统功能
后端新增功能:
- 集成 nodemailer 支持 SMTP 邮件发送
- 新增邮箱验证系统(VerificationDB)
- 新增密码重置令牌系统(PasswordResetTokenDB)
- 实现邮件发送限流(30分钟3次,全天10次)
- 添加 SMTP 配置管理接口
- 支持邮箱激活和密码重置邮件发送
前端新增功能:
- 注册时邮箱必填并需验证
- 邮箱验证激活流程
- 重发激活邮件功能
- 基于邮箱的密码重置流程(替代管理员审核)
- 管理后台 SMTP 配置界面
- SMTP 测试邮件发送功能
安全改进:
- 邮件发送防刷限流保护
- 验证令牌随机生成(48字节)
- 重置链接有效期限制
- 支持 SSL/TLS 加密传输
支持的邮箱服务:QQ邮箱、163邮箱、企业邮箱等主流SMTP服务
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 14:28:35 +08:00 |
|
|
|
83773ef54e
|
🐛 修复验证码跨域Cookie传递问题
## 问题描述
验证码在生产环境(https://cs.workyai.cn)一直提示"验证码已过期"
## 根本原因
axios默认不携带credentials(包括cookies),导致:
1. 验证码生成时的session cookie无法被浏览器保存
2. 登录时无法读取到验证码session
3. SessionID不一致导致验证失败
## 修复方案
在mounted钩子中添加axios全局配置:
```javascript
axios.defaults.withCredentials = true;
```
这样所有axios请求都会携带cookies,包括:
- 验证码生成请求
- 登录验证请求
- 所有其他API请求
## 配合后端配置
后端已配置:
- CORS: credentials: true
- Session cookie: sameSite: 'lax'
- Session: saveUninitialized: true
## 测试说明
1. 清除浏览器Cookie
2. 访问 https://cs.workyai.cn
3. 输错密码2次触发验证码
4. 输入验证码应该能正常通过
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:42:37 +00:00 |
|
|
|
61c99ce5c0
|
✨ 添加登录验证码功能 - 增强系统安全性
## 新增功能
- 密码输错2次后自动显示验证码
- 4位数字验证码,点击可刷新
- 验证码有效期5分钟
- 基于IP和用户名双重防护
- 前台和后台登录均支持
## 后端改动
- 新增验证码生成API: GET /api/captcha
- 修改登录API支持验证码验证
- 添加session管理验证码
- 增强RateLimiter防爆破机制
## 前端改动
- 登录表单添加验证码输入框(条件显示)
- 验证码图片展示和刷新功能
- 自动触发验证码显示逻辑
## 依赖更新
- 新增: svg-captcha (验证码生成)
- 新增: express-session (session管理)
## 文档
- CAPTCHA_FEATURE.md - 详细功能文档
- CAPTCHA_README.md - 快速开始指南
- test_captcha.sh - 自动化测试脚本
- 更新说明_验证码功能.txt - 中文说明
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:32:32 +00:00 |
|
|
|
7d1cb7b506
|
🐛 修复文件夹分享bug - 只显示第一个文件的问题
问题:
- 分享文件夹时,分享链接只显示文件夹内第一个文件
- 原因:前端无论文件还是文件夹都使用share_type='file'
- 后端对非file类型的分享路径处理不正确
修复方案:
1. 前端修改(frontend/app.js):
- shareFileForm添加isDirectory字段标记是否为文件夹
- openShareFileModal设置isDirectory值
- createShareFile根据isDirectory设置正确的share_type
* 文件: share_type='file'
* 文件夹: share_type='directory'
2. 后端修改(backend/database.js):
- 修复ShareDB.create中的sharePath逻辑
- file类型:使用file_path(单文件路径)
- directory类型:使用file_path(文件夹路径)
- all类型:使用'/'(根目录)
测试:
- 分享单个文件:正常显示单个文件
- 分享文件夹:正常显示文件夹内所有文件
- 分享所有文件:正常显示根目录所有文件
|
2025-11-18 17:58:31 +08:00 |
|
WanWanYun
|
cb4bf0e8d5
|
fix: 修复文件夹详情功能点击无反应的问题
问题描述:
- 右键文件夹 → 点击"查看详情"
- 菜单关闭但没有任何反应
- 详情弹窗不显示
根本原因:
在 contextMenuAction(action) 的 switch 语句中
**缺少 case 'info': 分支**
代码分析:
```javascript
contextMenuAction(action) {
switch (action) {
case 'preview': ...
case 'download': ...
case 'rename': ...
case 'share': ... // ❌ 直接跳到share,跳过了info
case 'delete': ...
}
}
```
修复方案:
在 rename 和 share 之间添加:
```javascript
case 'info':
this.showFolderInfo(this.contextMenuFile);
break;
```
修复后流程:
1. 右键文件夹 → "查看详情"
2. 触发 contextMenuAction('info')
3. 执行 showFolderInfo(file)
4. 调用后端 API: POST /api/files/folder-info
5. 显示详情弹窗(大小、文件数、子文件夹数)
之前为什么漏掉:
添加showFolderInfo方法时,忘记在contextMenuAction中注册该action
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:22:40 +08:00 |
|
WanWanYun
|
f64f86cd78
|
fix: 修复文件夹右键菜单问题 + 新增文件夹详情功能
修复内容:
1. 【文件夹右键菜单无法显示】
- 问题: showFileContextMenu() 中仍有 `if (file.isDirectory) return` 阻止代码
- 原因: 之前的修复脚本替换失败,代码仍在
- 修复: 手动移除这行限制代码
- 效果: 文件夹现在可以正常右键操作(重命名、删除、查看详情)
新功能:
2. 【文件夹详情查看】
后端API (POST /api/files/folder-info):
- 接收参数: path(当前路径), folderName(文件夹名称)
- 计算文件夹总大小(递归统计所有文件)
- 统计文件数量和子文件夹数量
- 返回数据: name, path, size, fileCount, folderCount
- 仅支持本地存储
前端功能:
- 右键菜单新增"查看详情"选项(仅文件夹显示)
- 详情弹窗显示:
* 文件夹名称
* 文件夹路径
* 总大小(格式化显示)
* 文件数量
* 子文件夹数量
- 加载中状态提示
- 错误处理和提示
使用方式:
1. 右键点击任意文件夹
2. 选择"查看详情"
3. 弹窗显示文件夹统计信息
技术改动:
- backend/server.js: +100行 (新增folder-info API)
- frontend/app.html: +40行 (详情弹窗UI + 菜单项)
- frontend/app.js: +30行 (状态 + showFolderInfo方法)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:07:21 +08:00 |
|