4.3 KiB
4.3 KiB
更新说明
问题修复
1. API路由404错误修复
问题:访问 /api/files
接口报404错误
原因:API路由放在了 src/api
目录下,但Next.js 13+的App Router要求API路由放在 src/app/api
目录下
解决方案:
- 将所有API路由从
src/api
移动到src/app/api
- 更新了文件上传、文件管理、认证相关的API路由
- 添加了
export const dynamic = 'force-dynamic';
确保API路由动态渲染
2. 权限控制系统实现
需求:上传和管理面板需要登录后才可访问,密码可以设置为固定密码
实现方案:
认证系统架构
- JWT Token认证:使用jsonwebtoken库实现基于token的认证
- HTTP-only Cookie:token存储在HTTP-only cookie中,增强安全性
- 中间件保护:所有需要认证的API都进行token验证
新增功能模块
1. 认证API路由
/api/auth/login
- 用户登录/api/auth/logout
- 用户登出/api/auth/check
- 检查认证状态
2. 认证中间件 (src/lib/auth.ts
)
authenticateUser()
- 验证用户密码authenticateRequest()
- 验证请求的token- 支持环境变量配置管理员密码
3. 认证Hook (src/hooks/useAuth.ts
)
isAuthenticated
- 认证状态loading
- 加载状态login()
- 登录方法logout()
- 登出方法checkAuth()
- 检查认证状态
4. 登录模态框 (src/components/LoginModal.tsx
)
- 密码输入框(支持显示/隐藏)
- 登录状态反馈
- 错误提示
5. 认证守卫 (src/components/AuthGuard.tsx
)
- 保护需要认证的页面
- 自动重定向到登录页面
- 登录成功后跳转到原页面
权限控制实现
1. 文件上传权限
- 未登录用户显示锁定状态的上传区域
- 点击上传时弹出登录模态框
- 登录成功后才能正常上传文件
2. 管理面板权限
- 整个
/admin
路由被AuthGuard保护 - 未登录用户自动显示登录界面
- 登录后才能访问管理功能
3. API权限保护
- 文件上传API (
/api/upload
) - 需要认证 - 文件管理API (
/api/files/*
) - 需要认证 - 文件列表API (
/api/files
) - 公开访问
环境变量配置
新增环境变量:
# Authentication
ADMIN_PASSWORD="admin123" # 管理员密码,可自定义
用户体验优化
1. 视觉反馈
- 未登录时上传区域显示锁定图标和提示
- 登录按钮在Header中显示
- 管理员身份标识
2. 交互流程
- 点击需要权限的功能时自动弹出登录框
- 登录成功后自动跳转到目标页面
- 登出后自动跳转到首页
3. 安全特性
- Token有效期24小时
- HTTP-only cookie防止XSS攻击
- 密码错误时提供友好提示
使用说明
默认登录信息
- 密码:
admin123
(可在.env.local
中修改)
登录流程
- 点击文件上传区域或访问
/admin
- 在弹出的登录框中输入密码
- 登录成功后即可使用所有功能
管理员功能
- 文件上传和管理
- 文件可见性控制
- 文件删除
- 查看统计信息
安全建议
- 修改默认密码:在生产环境中修改
ADMIN_PASSWORD
- 使用强密码:设置复杂的管理员密码
- 定期更换:定期更换管理员密码
- 环境保护:确保
.env.local
文件不被提交到版本控制
技术细节
JWT Token结构
{
isAdmin: true,
timestamp: number,
iat: number,
exp: number
}
Cookie配置
{
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
maxAge: 60 * 60 * 24, // 24 hours
path: '/',
}
错误处理
- 密码错误:返回401状态码
- Token无效:自动清除cookie并要求重新登录
- 网络错误:显示友好的错误提示
测试验证
功能测试
- ✅ 未登录用户无法上传文件
- ✅ 未登录用户无法访问管理面板
- ✅ 登录后可以正常上传文件
- ✅ 登录后可以访问管理面板
- ✅ 登出后权限被正确收回
- ✅ API路由正确响应
安全测试
- ✅ Token验证正常工作
- ✅ Cookie安全设置正确
- ✅ 密码错误被正确拒绝
- ✅ Token过期后需要重新登录
系统现在具备完整的权限控制功能,确保只有授权用户才能进行文件上传和管理操作。